Функция strtol

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

Пример работы программы

CppStudio.com
Десятичные эквиваленты распознанных чисел:
2001
6340800
-3624224
7340031
Автор: admin
Дата: 02.09.2012
Поделиться:

Оставить комментарий

Вы должны войти, чтобы оставить комментарий.