Функция strtoull () в C ++ интерпретирует содержимое строки как целое число указанной базы и возвращает его значение как unsigned long long int.
Функция strtoull () в C ++ интерпретирует содержимое строки как целое число указанной базы и возвращает его значение как unsigned long long int.
Эта функция также устанавливает указатель так, чтобы он указывал на первый символ после последнего допустимого символа в строке, если он есть, в противном случае указатель устанавливается в нуль.
Для базы 10 и строки "41aac" действительная числовая часть -> 42 Первый символ после действительной числовой части -> a
strtoull () прототип (в соответствии со стандартом C ++ 11)
unsigned long long int strtoull (const char * str, char ** end, int base);
Функция strtoull () принимает в качестве параметра строку, указатель на символ и целочисленное значение - base, интерпретирует содержимое строки как целое число заданной базы и возвращает значение типа long long int без знака.
Эта функция определена в заголовочном файле.
Параметры strtoull ()
str:
Строка, имеющая представление целого числа.end:
Ссылка на уже выделенный объект типа char *. Значение end устанавливается функцией на следующий символ в строке после последнего допустимого символа. Этот параметр также может быть нулевым указателем, и в этом случае он не используется.base:
База интегрального значения. Набор допустимых значений для базы: (0, 2, 3,…, 35, 36).
strtoull () Возвращаемое значение
Функция strtoull () возвращает:
- значение типа unsigned long long int (преобразованное из строки).
- 0, если действительное преобразование не может быть выполнено.
Пример 1: Как работает функция strtoull ()?
#include #include #include using namespace std; int main() ( int base = 10; char numberString() = "231ax12"; char *end; unsigned long long int number; number = strtoull(numberString, &end, base); cout << "String value = " << numberString << endl; cout << "Unsigned Long long int value = " << number << endl; cout << "End String = " << end << endl; strcpy(numberString, "231"); cout << "String value = " << numberString << endl; number = strtoull(numberString, &end, base); cout << "Unsigned Long long int value = " << number << endl; if (*end) ( cout << end; ) else ( cout << "Null pointer"; ) return 0; )
Когда вы запустите программу, вывод будет:
Строковое значение = 231ax12 Unsigned Long long int value = 231 End String = ax12 Строковое значение = 231 Unsigned Long long int value = 231 Null указатель
Допустимое целочисленное значение для функции strtoull () состоит из:
- Необязательный знак + или -.
- Префикс 0 для восьмеричной основы (применяется только когда base = 8 или 0).
- Префикс 0x или 0X для шестнадцатеричного основания (применяется только когда base = 16 или 0).
- Последовательность цифр и / или алфавитов (если основание больше 10).
Если аргумент содержит знак минус (-) в начале, отрицательное число неявно преобразуется в тип unsigned long long int, который является положительным числом.
Допустимые значения для базы параметров: (0, 2, 3,…, 35, 36). Набор действительных цифр для базы 2 - (0, 1), для базы 3 - (0, 1, 2) и т. Д. Для оснований от 11 до 36 действительные цифры включают алфавиты. Набор действительных цифр для базы 11 - (0, 1,…, 9, A, a), для базы 12 - (0, 1,…, 9, A, a, B, b) и так далее.
Пример 2: функция strtoull () с разными базами
#include #include using namespace std; int main() ( char *end; cout << "148ax" << " to Unsigned Long Long Int with base-5 = " << strtoll("148ax", &end, 5) << endl; cout << "End String = " << end << endl << endl; cout << "148ax" << " to Unsigned Long Long Int with base-15 = " << strtoll("148ax", &end, 15) << endl; cout << "End String = " << end << endl << endl; cout << "148ax" << " to Unsigned Long Long Int with base-35 = " << strtoll("148ax", &end, 35) << endl; cout << "End String = " << end << endl << endl; return 0; )
Когда вы запустите программу, вывод будет:
148ax в Unsigned Long Long Int с base-5 = 9 End String = 8ax 148ax в Unsigned Long Long Int с base-15 = 4405 End String = x 148ax в Unsigned Long Long Int с base-35 = 1682308 End String =
Функция strtoull () игнорирует все ведущие пробельные символы до тех пор, пока не будет найден основной непробельный символ.
В общем случае допустимый целочисленный аргумент для функции strtoull () имеет следующий вид:
(пробел) (- | +) (0 | 0x) (буквенно-цифровые символы)
Затем, начиная с этого символа, требуется как можно больше символов, которые образуют допустимое целочисленное представление и преобразуют их в значение long long int. Все, что осталось от строки после последнего допустимого символа, игнорируется и не влияет на результат.
Пример 3: функция strtoull () для начального пробела, минуса и недопустимого преобразования
#include #include using namespace std; int main() ( char *end; cout << " 25axbz" << " to Unsigned Long Long Int with base-11 = " << strtoull(" 25axbz", &end, 11) << endl; cout << "End String = " << end << endl << endl; /* Negative value is converted to unsigned long long int type */ cout << " -110bcd" << " to Unsigned Long Long Int with base-2 = " << strtoull(" -110bcd", &end, 2) << endl; cout << "End String = " << end << endl << endl; cout << "ax110.97" << " to Unsigned Long Long Int with base-10 = " << strtoull("ax110.97", &end, 10) << endl; cout << "End String = " << end << endl << endl; return 0; )
Когда вы запустите программу, вывод будет:
25axbz в Unsigned Long Long Int с base-11 = 307 End String = xbz -110bcd в Unsigned Long Long Int с base-2 = 18446744073709551610 End String = bcd ax110.97 в Unsigned Long Long Int с base-10 = 0 End String = ax110.97
Если основание равно 0, числовое основание определяется автоматически, глядя на формат строки. Если префикс 0, основание восьмеричное (8). Если префикс 0x или 0X, основание - шестнадцатеричное (16), в противном случае - десятичное (10).
Пример 4: функция strtoull () с базой 0
#include #include using namespace std; int main() ( char *end; /* octal base */ cout << "017x" << " to Unsigned Long Long Int with base-0 = " << strtoull("017x", &end, 0) << endl; cout << "End String = " << end << endl << endl; /* hexadecimal base */ cout << "0x1cg" << " to Unsigned Long Long Int with base-0 = " << strtoull("0x1cg", &end, 0) << endl; cout << "End String = " << end << endl << endl; /* decimal base */ cout << "70sxz" << " to Unsigned Long Long Int with base-0 = " << strtoull("70sxz", &end, 0) << endl; cout << "End String = " << end << endl << endl; return 0; )
Когда вы запустите программу, вывод будет:
017x в Unsigned Long Long Int с base-0 = 15 End String = x 0x1cg в Unsigned Long Long Int с base-0 = 28 End String = g 70sxz в Unsigned Long Long Int с base-0 = 70 End String = sxz