Пространства имён
Варианты
Действия

std::strtoul, std::strtoull

Материал из cppreference.com
< cpp‎ | string‎ | byte
Определено в заголовочном файле <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 documentation for strtoul, strtoull