std::strtoul, std::strtoull
| Определён в заголовочном файле <cstdlib>
|
||
| unsigned long strtoul( const char *str, char **str_end, int base ); |
||
| unsigned long long strtoull( 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 | — | Двойной указатель на символ. |
| base | — | Используемая в записи система счисления. |
[править] Возвращаемое значение
Целочисленное значение, которое соответствует содержимому str в случае успешного преобразования. Если сконвертированное значение не входит в диапазон требуемого типа, то оно завершается ошибкой диапазона, а в качестве значения возвращается ULONG_MAX или ULLONG_MAX. Если никакое преобразование не применить, то возвращается 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 (unsigned long i = std::strtoul(p, &end, 10); p != end; i = std::strtoul(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' -> Ошибка диапазона, получили 18446744073709551615 ' 30' -> 30 ' -40' -> 18446744073709551576
[править] См. также
| преобразует широкий строка целое число без знака Оригинал: converts a wide string to an unsigned integer value Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. (функция) | |
| Преобразует однобайтовую строку в целое число (функция) | |
| Преобразует однобайтовую строку в целое число в различных системах счисления (функция) | |
| Справка по C — strtoul, strtoull
| |

