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

std::strtoul, std::strtoull

Материал из cppreference.com
< cpp‎ | string‎ | byte
 
 
 
Однобайтовые строки с завершающим нулём
Функции
Манипуляции с символами
Преобразование в числовые форматы
strtoulstrtoull
(C++11)
(C++11)(C++11)
(C++11)(C++11)
Манипуляции со строками
Проверка строки
Манипуляции с памятью
Разное
 
Определено в заголовочном файле <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 в безнаковое целое число.

Отбрасывает любые пробельные символы (определяемые вызовом 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, то шестнадцатеричная, иначе десятичная.

Если знак минус был частью входной последовательности, числовое значение, вычисленное из последовательности цифр, инвертируется, как если бы был унарный минус в типе результата, который применяет правила переноса для бес знаковых целых чисел.

Функции устанавливают указатель, на который указывает str_end, так, чтобы он указывал на символ после последнего интерпретируемого символа. Если str_end является нулевым указателем, он игнорируется.

Содержание

[править] Параметры

str указатель на строку байтов с завершающим нулём, которую нужно интерпретировать
str_end указатель на указатель на символ, может быть установлен в положение после последнего интерпретируемого символа
base система счисления интерпретируемого целочисленного значения

[править] Возвращаемое значение

Целочисленное значение, соответствующее содержимому str в случае успеха. Если преобразованное значение выходит за пределы диапазона соответствующего возвращаемого типа, возникает ошибка диапазона (errno устанавливается в ERANGE) и возвращается ULONG_MAX или ULLONG_MAX. Если преобразование невозможно, возвращается 0.

[править] Пример

#include <cstdlib>
#include <errno.h>
#include <iostream>
#include <string>
 
int main()
{
    const char* p = "10 200000000000000000000000000000 30 -40 - 42";
    char *end = nullptr;
    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)
        {
            errno = 0;
            std::cout << "ошибка диапазона, получаем ";
        }
        std::cout << i << '\n';
    }
    std::cout << "После цикла p указывает на '" << p << "'\n";
}

Возможный вывод:

Разбор '10 200000000000000000000000000000 30 -40 - 42':
'10' -> 10
' 200000000000000000000000000000' -> ошибка диапазона, получаем 18446744073709551615
' 30' -> 30
' -40' -> 18446744073709551576
После цикла p указывает на ' - 42'

[править] Смотрите также

(C++11)(C++11)
преобразует строку в целое число без знака
(функция) [править]
преобразует байтовую строку в целочисленное значение
(функция) [править]
(C++11)(C++11)
преобразует байтовую строку в std::intmax_t или std::uintmax_t
(функция) [править]
преобразует широкую строку в целое число без знака
(функция) [править]
преобразует байтовую строку в число с плавающей запятой
(функция) [править]
преобразует последовательность символов в целое число или значение с плавающей запятой
(функция) [править]
преобразует байтовую строку в целочисленное значение
(функция) [править]
Документация C по strtoul, strtoull