Прототип функции strtol:
long int strtol( const char * string, char ** endptr, int basis );
Название | Язык |
---|---|
stdlib.h | С |
cstdlib | С++ |
Описание
Функция strtol
преобразовывает строку в long int
. Анализируя строку string
, strtol
интерпретирует её содержимое в целое число типа long int
.
Функция сначала отбрасывает символы пробелов до тех пор, пока не будет найден символ отличный от символа пробела. Затем, начиная с этого символа, функция принимает необязательный начальный знак плюс или минус. После чего, следует последовательность цифр, которая интерпретируется в числовое значение. И, наконец, устанавливается указатель endptr
на первый символ, сразу после найденного числового значения.
Если значение basis
равно нулю, ожидается распознавание целых чисел, которые формирует последовательность:
- Необязательные знаки — плюс или минус
- Возможный префикс, указывающий основание, восьмеричное или шестнадцатеричное («0″ или «0x» соответственно)
- Последовательность десятичных цифр (если префикс указан в
basis
) или любая восьмеричная или шестнадцатеричной цифра, если определенный префикс присутствует в строке.
Если значение basis
находится между 2 и 36, ожидаемый формат — целое число, представляемое собой последовательность действительных цифр и/или букв в указанном основании системы счисления (начиная от 0
до z
/ Z
для системы счисления 36). В последовательности может присутствовать знак плюс или минус, и, если basis
равно 16 — префикс 0x
или 0X
.
Если первая последовательность не-пробельных символов в строке string
не является целым числом, или, если string
пустая или содержит только пробельные символы, преобразование не выполняется.
Параметры:
- string
Си-строка для выполнения преобразования.
- endptr
Ссылка на объект типаchar*
, значение которой содержит адрес следующего символа в строкеstring
, сразу после предыдущего найденного числа. Если этот параметр не используется, он должен быть нулевым указателем.
- basis
Основание системы исчисления.
Возвращаемое значение
В случае успеха, функция возвращает целое число преобразованное к типу данных long int
.
Если в строке не было найдено целое число, функция возвращает нулевое значение.
Если правильное значение выходит за диапазон принимаемых значений, возвращается LONG_MAX
или LONG_MIN
, и глобальная переменная ERRNO
устанавливается в ERANGE
.
Пример: исходный код программы
//пример использования функции strtol #include <iostream> #include <cstdlib> #include <iomanip> int main () { char numbers[] = "2001 60c0c0 -1101110100110100100000 0x6fffff"; char * pEnd; long int li1 = strtol(numbers, &pEnd, 10), // преобразовать первую часть строки в значение 10-й СС li2 = strtol(pEnd, &pEnd, 16), // преобразовать часть строки в значение 16-й СС li3 = strtol(pEnd, &pEnd, 2), // преобразовать часть строки в значение 2-й СС li4 = strtol(pEnd, NULL, 0); // преобразовать оставшуюся часть строки в распознав значение автоматически std::cout << "Десятичные эквиваленты распознанных чисел:n" << std::dec << std::setw(10) << li1 << "n" << std::setw(10) << li2 << "n" << std::setw(10) << li3 << "n" << std::setw(10) << li4 << "n"; return 0; }
Пример работы программы
2001
6340800
-3624224
7340031