Spec-Zone.ru › C++

std::strtoimax, std::strtoumax

Определено в заголовочном файле <cinttypes>
std::intmax_t strtoimax( const char* nptr, char** endptr, int base );
(1) (начиная с C++11)
std::uintmax_t strtoumax( const char* nptr, char** endptr, int base );
(2) (начиная с C++11)

Интерпретирует целочисленное значение в байтовой строке, на которую указывает nptr.

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

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

Допустимые значения основания — {0, 2, 3, ..., 36}. Допустимые цифры для целых чисел с основанием 2 — {0, 1}, для целых чисел с основанием 3 — {0, 1, 2} и так далее. Для оснований больше 10 допустимые цифры включают буквенные символы: от Aa для целого числа с основанием 11 до Zz для целого числа с основанием 36. Регистр символов не учитывается.

Текущая установленная локаль C locale может допускать дополнительные числовые форматы.

Если значение base равно 0, основание системы счисления определяется автоматически: если префикс — 0, основание восьмеричное; если префикс — 0x или 0X, основание шестнадцатеричное; в противном случае основание десятичное.

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

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

Если nptr пуста или имеет неверный формат, преобразование не выполняется, а значение nptr записывается в объект, на который указывает endptr (если enptr не является нулевым указателем).

Параметры

nptr - указатель на завершаемую нулём байтовую строку, которую нужно интерпретировать
endptr - указатель на указатель на символ.
base - основание интерпретируемого целочисленного значения

Возвращаемое значение

  • В случае успеха возвращается целочисленное значение, соответствующее содержимому str.
  • Если преобразованное значение выходит за пределы диапазона соответствующего возвращаемого типа, возникает ошибка диапазона (errno устанавливается в ERANGE), а возвращается INTMAX_MAX, INTMAX_MIN, UINTMAX_MAX или 0 — в зависимости от ситуации.
  • Если преобразование выполнить невозможно, возвращается 0.

Пример

#include <cinttypes>
#include <iostream>
#include <string>

int main()
{
    std::string str = "helloworld";
    std::intmax_t val = std::strtoimax(str.c_str(), nullptr, 36);
    std::cout << str << " in base 36 is " << val << " in base 10\n";

    char* nptr;
    val = std::strtoimax(str.c_str(), &nptr, 30);
    if (nptr != &str[0] + str.size())
        std::cout << str << " in base 30 is invalid."
                  << " The first invalid digit is '" << *nptr << "'\n";
}

Вывод:

helloworld in base 36 is 1767707668033969 in base 10
helloworld in base 30 is invalid. The first invalid digit is 'w'

См. также

stoistolstoll
(C++11)(C++11)(C++11)
преобразует строку в целое число со знаком
(функция)
stoulstoull
(C++11)(C++11)
преобразует строку в беззнаковое целое число
(функция)
strtolstrtoll
(C++11)
преобразует байтовую строку в целочисленное значение
(функция)
strtoulstrtoull
(C++11)
преобразует байтовую строку в беззнаковое целочисленное значение
(функция)
wcstoimaxwcstoumax
(C++11)(C++11)
преобразует широкую строку в std::intmax_t или std::uintmax_t
(функция)
strtofstrtodstrtold
преобразует байтовую строку в значение с плавающей точкой
(функция)
from_chars
(C++17)
преобразует последовательность символов в целочисленное значение или значение с плавающей точкой
(функция)
atoiatolatoll
(C++11)
преобразует байтовую строку в целочисленное значение
(функция)
Документация C для strtoimax, strtoumax

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/string/byte/strtoimax

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API