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 локалем.
Если значение base равно 0, числовая основа определяется автоматически: если префикс 0, основание равно восьмеричному, если префикс 0x или 0X, основание равно шестнадцатеричному, в противном случае основание равно десятичному.
Если знак минус был частью входной последовательности, числовое значение, вычисленное по последовательности цифр, отрицается, как если бы это было сделано с помощью унарного минуса в типе результата.
Функции устанавливает указатель, на который указывает endptr, чтобы указать на символ после последнего интерпретированного символа. Если endptr является нулевым указателем, он игнорируется.
Если nptr пуста или не имеет ожидаемой формы, преобразование не выполняется, и (если enptr не является нулевым указателем) значение nptr сохраняется в объекте, на который указывает endptr.
Параметры
| 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/w/cpp/string/byte/strtoimax