Пространства имён
Варианты
Действия

std::strtol, std::strtoll

Материал из cppreference.com
< cpp‎ | string‎ | byte
Определено в заголовочном файле <cstdlib>
long      strtol( const char *str, char **str_end, int base );
long long strtoll( const char *str, char **str_end, int base );
(начиная с C++11)

Преобразует строку, доступную по указателю str в целочисленное значение.

Пропускаются все пробельные символы (которые определяются таковыми с помощью вызова функции isspace()), до тех пор пока не встретится первый символ другого типа, затем берётся как много больше символов, которые формируют корректную запись целочисленного числа в n-системе счисления (где n = base) , и конвертирует её в значение нужного типа. Корректная запись целого числа состоит из следующих частей:

  • (необязательно) знак плюса или минуса
  • (необязательно) префикс (0), который обозначает использование 8-ричной системы счисления (применимо только тогда, когда base равен 8 или 0)
  • (необязательно) префикс (0x или 0X), который обозначает использование 16-ричной системы счисления (применимо только тогда, когда base равен 16 или 0)
  • последовательность цифр.

Допустимый набор цифр для 2-ричной системы счисления - 01, для 3-ичной - 012 и так далее, начиная с 11-ричной системы счисления в диапазон допустимых цифр входят латинские буквы от Aa до Zz для 36-ричной системы счисления. В этом случае регистр букв не имеет значения.

Дополнительные форматы для чисел могут применяться, используя региональные параметры Си.

Если значение base равно 0, то система счисления автоматически определяется: если присутствует префикс 0, то она 8-ричная, если 0x или 0X, то 16-ричная, иначе 10-ричная.

Если знак минуса был частью входной последовательности, то числовое значение вычисляется, путём применения к числу из последовательности цифр операции унарного минуса.


Функция устанавливает str_end на указатель, который указывает на следующий за символом, который использовался в записи распознанного числа. Если str_end равен NULL, то он игнорируется.

Если str пустой или не содержит ожидаемой записи числа, то никакого преобразования не будет сделано, и (если str_end не NULL) значение str будет храниться по указателю str_end.

Содержание

[править] Параметры

str - Указатель на однобайтовую нульзавершённую строку, из которой необходимо получить целое число
str_end - двойной указатель на символ
base - система счисления, используемая в записи числа

[править] Возвращаемое значение

  • Если преобразование успешно, то возвращается целочисленное значение, соответствующее содержимому str.
  • Если сконвертированное значение не входит в диапазон значений заданного типа, то возникает ошибка диапазона типа (устанавливается errno в ERANGE), и возвращается в качестве значения LONG_MAX, LONG_MIN, LLONG_MAX или LLONG_MIN
  • Если никакое преобразование не применить, то возвращается 0

[править] Пример

#include <iostream>
#include <string>
#include <errno.h>
#include <cstdlib>
 
int main()
{
    const char* p = "10 200000000000000000000000000000 30 -40";
    char *end;
    std::cout << "Распознаём '" << p << "':\n";
    for (long i = std::strtol(p, &end, 10);
         p != end;
         i = std::strtol(p, &end, 10))
    {
        std::cout << "'" << std::string(p, end-p) << "' -> ";
        p = end;
        if (errno == ERANGE){
            std::cout << "Ошибка диапазона, получили ";
            errno = 0;
        }
        std::cout << i << '\n';
    }
}

Вывод:

Распознаём '10 200000000000000000000000000000 30 -40':
'10' -> 10
' 200000000000000000000000000000' -> Ошибка диапазона, получили 9223372036854775807
' 30' -> 30
' -40' -> -40

[править] См. также

Преобразует однобайтовую строку в целое число
(функция) [править]
Преобразует однобайтовую строку в целое число без знака в различных системах счисления
(функция) [править]
преобразует широкий строку в целое значение
Оригинал:
converts a wide string to an integer value
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

(функция) [править]
Преобразует однобайтовую строку в число с плавающей запятой
(функция) [править]
C documentation for strtol, strtoll