STRTOUL(3)

НАЗВАНИЕ
strtoul, strtoull - конвертирует строку в беззнаковое целое число (unsigned long integer)

СИНТАКСИС
#include <stdlib.h>

unsigned long int
strtoul(const char *nptr, char **endptr, int base);

unsigned long long int
strtoull(const char *nptr, char **endptr, int base);

ОПИСАНИЕ
Функция strtoul() конвертирует начальную часть строки nptr в беззнаковое целое число в зависимости от системы исчисления base, которая должна иметь значения от 2-х до 36-х включительно или специальное значение 0.

Строка должна начинаться с произвольного количества пустых символов (определяемых при помощи isspace(3)), затем должен идти знак `+' или `-' (если есть). Если base равно нулю или 16-и, то строка может начинаться с приставки `0x', что означает использование шестнадцатеричной системы исчисления; иначе, если base равно нулю, используется десятичная система счисления, кроме случая, когда последующий символ также равен `0': тогда используется восьмеричная система исчисления.

Остаток строки, таким образом, конвертируется в беззнаковое целое число. Этот процесс останавливается, если в строке встречается некорректное значение (например, не соответствующая системе исчисления цифра). Символ `A' в верхнем или нижнем регистре означает 10, `B' означает 11 и так далее (до `Z', означающей 35).

Если значение endptr не NULL, то strtol() записывает адрес первого некорректного значения в *endptr. Если в строке вообще нет цифр, то strtol() сохраняет начальное значение nptr в *endptr (и возвращает 0). Соответственно, если *nptr не равно `\0', а **endptr равно `\0' по возвращении, то вся строка состоит из корректных символов.

Функция strtoull() работает так же, как и strtoul(), но возвращает целое число типа unsigned long long int.

ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ
Функция strtol() возвращает результат преобразования, либо, если был указан знак минуса, возвращается абсолютное значение результата преобразования. Если абсолютное значение вызовет "переполнение", то strtol() возвращает ULONG_MAX, а переменной errno присваивается значение ERANGE. То же самое относится к strtoull(), (только вместо ULONG_MAX возвращаетс ULLONG_MAX).

НАЙДЕННЫЕ ОШИБКИ

ERANGE
    данная строка не входит в обрабатываемый диапазон чисел.

EINVAL
    (не включено в C99) Аргумент base содержит неподдерживаемое значение.

Некоторые реализации могут также устанавливать errno в EINVAL в случае, когда преобразование не было выполнено (не было встречено цифр и возвращен 0).

ЗАМЕЧАНИЯ
В локалях, отличных от локали "C", могут приниматься и другие строки.

СООТВЕТСТВИЕ СТАНДАРТАМ
Функция strtoul() соответствует SVID 3, BSD 4.3, ISO 9899 (C99) и POSIX, а функция strtoull() соответствует ISO 9899 (C99) и POSIX-2001.

СМ. ТАКЖЕ
atof(3), atoi(3), atol(3), strtod(3), strtol(3)