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'
См. также
|
(C++11)(C++11)(C++11) | преобразует строку в целое число со знаком (функция) |
|
(C++11)(C++11) | преобразует строку в беззнаковое целое число (функция) |
|
(C++11) | преобразует байтовую строку в целочисленное значение (функция) |
|
(C++11) | преобразует байтовую строку в беззнаковое целочисленное значение (функция) |
|
(C++11)(C++11) | преобразует широкую строку в std::intmax_t или std::uintmax_t (функция) |
| преобразует байтовую строку в значение с плавающей точкой (функция) |
|
|
(C++17) | преобразует последовательность символов в целочисленное значение или значение с плавающей точкой (функция) |
|
(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