std::strtoul, std::strtoull
Определено в заголовочном файле <cstdlib>
|
||
unsigned long strtoul( const char *str, char **str_end, int base ); |
||
unsigned long long strtoull( const char *str, char **str_end, int base ); |
(начиная с C++11) | |
Преобразует однобайтовую строку, на которую указывает str в безнаковое целое число.
Отбрасывает любые пробельные символы (определяемые вызовом std::isspace) до тех пор, пока не будет найден первый непробельный символ, а затем берёт как можно больше символов для формирования действительного по основанию-n (где n=base
) бес знакового представления целых чисел и преобразует их в целочисленное значение. Действительное бес знаковое целочисленное значение состоит из следующих частей:
- (необязательно) знак плюс или минус
- (необязательно) префикс (
0
), указывающий восьмеричное основание (применяется, только если основание равно 8 или 0) - (необязательно) префикс (
0x
или0X
), указывающий шестнадцатеричное основание (применяется, только если основание равно 16 или 0) - последовательность цифр.
Набор допустимых значений для системы счисления {0,2,3,...,36}.
Набор допустимых цифр для целых чисел с основанием 2
это {0,1},
для целых чисел с основанием 3 равен {0,1,2},
и так далее. Для оснований, превышающих 10
, допустимые цифры включают буквенные символы, начиная с Aa
для целого числа с основанием 11
, до Zz
для целого числа с основанием 36
. Регистр символов игнорируется.
Дополнительные числовые форматы могут быть приняты текущей установленной локалью C.
Если значение base равно 0, то система счисления определяется автоматически: если присутствует префикс 0
, то она восьмеричная, если префикс 0x
или 0X
, то шестнадцатеричная, иначе десятичная.
Если знак минус был частью входной последовательности, числовое значение, вычисленное из последовательности цифр, инвертируется, как если бы был унарный минус в типе результата, который применяет правила переноса для бес знаковых целых чисел.
Функции устанавливают указатель, на который указывает str_end, так, чтобы он указывал на символ после последнего интерпретируемого символа. Если str_end является нулевым указателем, он игнорируется.
Содержание |
[править] Параметры
str | — | указатель на строку байтов с завершающим нулём, которую нужно интерпретировать |
str_end | — | указатель на указатель на символ, может быть установлен в положение после последнего интерпретируемого символа |
base | — | система счисления интерпретируемого целочисленного значения |
[править] Возвращаемое значение
Целочисленное значение, соответствующее содержимому str в случае успеха. Если преобразованное значение выходит за пределы диапазона соответствующего возвращаемого типа, возникает ошибка диапазона (errno устанавливается в ERANGE
) и возвращается ULONG_MAX или ULLONG_MAX. Если преобразование невозможно, возвращается 0.
[править] Пример
#include <cstdlib> #include <errno.h> #include <iostream> #include <string> int main() { const char* p = "10 200000000000000000000000000000 30 -40 - 42"; char *end = nullptr; std::cout << "Разбор '" << p << "':\n"; for (unsigned long i = std::strtoul(p, &end, 10); p != end; i = std::strtoul(p, &end, 10)) { std::cout << "'" << std::string(p, end - p) << "' -> "; p = end; if (errno == ERANGE) { errno = 0; std::cout << "ошибка диапазона, получаем "; } std::cout << i << '\n'; } std::cout << "После цикла p указывает на '" << p << "'\n"; }
Возможный вывод:
Разбор '10 200000000000000000000000000000 30 -40 - 42': '10' -> 10 ' 200000000000000000000000000000' -> ошибка диапазона, получаем 18446744073709551615 ' 30' -> 30 ' -40' -> 18446744073709551576 После цикла p указывает на ' - 42'
[править] Смотрите также
(C++11)(C++11) |
преобразует строку в целое число без знака (функция) |
(C++11) |
преобразует байтовую строку в целочисленное значение (функция) |
(C++11)(C++11) |
преобразует байтовую строку в std::intmax_t или std::uintmax_t (функция) |
преобразует широкую строку в целое число без знака (функция) | |
преобразует байтовую строку в число с плавающей запятой (функция) | |
(C++17) |
преобразует последовательность символов в целое число или значение с плавающей запятой (функция) |
(C++11) |
преобразует байтовую строку в целочисленное значение (функция) |
Документация C по strtoul, strtoull
|