Прототип функции 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