std::strtol, std::strtoll
| Определён в заголовочном файле <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 — strtol, strtoll
| |

