Преобразование шестнадцатеричной строки в целое число со знаком в С++

Опубликовано: 20 Февраля, 2023

В этой статье обсуждается преобразование шестнадцатеричной строки в целое число со знаком в C++. В C++ есть 5 способов сделать это:

  1. Использование функции stoi().
  2. Использование функции stoul().
  3. Использование функции sscanf().
  4. Использование метода строкового потока.
  5. Использование boost:lexical_cast.

1. Использование функции стои

стои является функцией в заголовочном файле строки . Функция принимает в качестве аргумента строку и возвращает преобразованное целое число. Синтаксис функции следующий:

Синтаксис:

int stoi (char *str, size_t* idx, int base);

Здесь,

str: The input string that is to be converted
size: Pointer to the object whose value is set by the function
base: It specifies the radix to determine the value type of input string

Поскольку требуется преобразовать шестнадцатеричную строку в целое число, основание будет равно 16.

Пример:

Объяснение: Во-первых, были включены соответствующие заголовочные файлы. Затем определяется строка, содержащая шестнадцатеричный код 4AF1 в качестве значения. Эта строка (массив символов) передается функции stoi вместе с 0 и 16 в качестве аргументов. Где 0 — значение размера по умолчанию, а 16 — для шестнадцатеричного преобразования. Возвращаемое значение функции хранится в виде целого числа со знаком. Эта шестнадцатеричная строка вместе с ее целочисленным эквивалентом со знаком позже отображается.

2. Использование функции стула

Тот же эффект можно получить с помощью функции stoul в заголовочном файле bits/stdc++.h.

Синтаксис:

unsigned long stoul (const string&  str, size_t* idx = 0, int base = 10);

Здесь,

str: String object with the representation of an integral number.
idx: Pointer to an object of type size_t, whose value is set by the function to position of the next character in str after the numerical value. This parameter can also be a null pointer, in which case it is not used.
base: Numerical base (radix) determines the valid characters and their interpretation. If this is 0, the base used is determined by the format in the sequence.Notice that by default this argument is 10, not 0. 

Пример:

Объяснение: Во-первых, строка содержит значение FF (255). Затем эта строка передается в качестве аргумента функции stoul вместе с 0 (обозначает нулевой указатель) и 16 (обозначает шестнадцатеричное преобразование). Результат сохраняется в виде целого числа без знака. Эта переменная отображается в конце.

3. Использование функции sscanf

Тот же эффект можно получить, используя функцию sscanf в дистрибутиве C++ по умолчанию.

Синтаксис:

int sscanf(const char *str, const char *format, ...)

Здесь,

str: This is the C string that the function processes as its source to retrieve the data.
format: This is the C string that contains one or more of the following items: Whitespace character, Non-whitespace character and Format specifiers

Пример:

Объяснение: Инициализируется строка, содержащая значение 4F (int = 79). Другая переменная типа unsigned int инициализируется значением 0. Вызывается функция sscanf, и строка вместе со спецификатором шестнадцатеричного формата «%X» и целым числом, в котором хранится результирующее значение, передаются в качестве аргумента. В конце отображается значение целого числа со знаком.

4. Использование метода stringstream

Метод stringsteam преобразует строковый объект в поток, чтобы создать впечатление, что данные считываются из потока. Библиотека в основном используется для анализа данных, хранящихся внутри строк.

Пример:

Выход:

255

Объяснение:

Как и в предыдущих примерах, целочисленная переменная без знака и строка, содержащая шестнадцатеричный код, хранятся в отдельных переменных. Затем строка передается в качестве аргумента функции iss . Функция преобразует обычную строку в поток. Затем базовый формат поля устанавливается в шестнадцатеричный, что приводит к преобразованию шестнадцатеричной строки в целое число, а результат сохраняется в переменной x . Это делается с помощью шестигранного манипулятора. В конце отображается беззнаковое значение.

5. Использование boost:lexical_cast

Boost:lexical_cast может преобразовать шестнадцатеричную строку в целое число со знаком. Он использует stringstream за кулисами.

Пример:

Выход:

255

Объяснение: работа и структура функции очень похожи на те, что используются в методе stringstream . Единственное отличие состоит в том, что перед шестнадцатеричной строкой необходимо добавить 0x , чтобы функция lexical_cast подтвердила наличие шестнадцатеричной строки. После чего строка передается в качестве аргумента функции lexical_cast, а ее результат сохраняется. В конце отображается значение, связанное с шестнадцатеричным кодом.