#include <stdlib.h> unsigned long int strtoul(const char *start, char **end, int radix);
Функция strtoul() преобразует строковое представление числа, которое содержится в строке, адресуемой параметром start, в значение типа unsigned long и возвращает полученный результат. Основание системы счисления, в которой представлено число, определяется параметром radix. Если значение radix равно нулю, то основание определяется так же, как и основание системы счисления при записи констант. Если значение radix не равно нулю, то оно должно быть целым числом от 2 до 36.
В версии С99 к параметрам start и end применен квалификатор restrict.
Функция strtoul() работает следующим образом:
Сначала в строке, адресуемой параметром start, пропускаются пробелы, символы табуляции и пустой строки. Затем считывается число. Считывание заканчивается как только будет обнаружен символ, который не может быть частью длинного целого числа без знака. К таким символам относятся пробелы, символы табуляции и пустой строки, знаки препинания и другие символы. Наконец, параметр end устанавливается так, чтобы указывать на "неиспользованный" остаток исходной строки, если такой существует. Например, если функция strtoul() вызывается с аргументом
"100 клещей"
то она возвратит значение
100L
а параметр end будет указывать на пробел, предшествующий слову
"клещей"
Если результат не может быть представлен как длинное целое без знака, функция strtoul() возвращает значение ULONG_MAX, а глобальная переменная errno устанавливается равной значению ERANGE, что свидетельствует об ошибке из-за выхода результата за пределы представимых чисел. Если параметр start не указывает на число, никакого преобразования не выполняется и функция возвращает нуль.
Следующая функция может использоваться для чтения из стандартного входного потока числа, представленного в шестнадцатеричной системе счисления. Данная функция возвращает результат (целое число) типа unsigned long.
unsigned long int read_unsigned_long(void) { char start[80], *end; printf("Введите шестнадцатеричное число: "); gets(start); return strtoul(start, &end, 16); }