Namespaces
Variants

std:: strtoul, std:: strtoull

From cppreference.net
헤더 파일에 정의됨 <cstdlib>
unsigned long strtoul ( const char * str, char ** str_end, int base ) ;
(1)
unsigned long long strtoull ( const char * str, char ** str_end, int base ) ;
(2) (C++11 이후)

str 이 가리키는 바이트 문자열에서 부호 없는 정수 값을 해석합니다.

(호출 std::isspace 로 식별되는) 모든 공백 문자들을 버리고 첫 번째 비공백 문자를 찾은 후, 유효한 base-n (여기서 n= base ) 부호 없는 정수 숫자 표현을 형성하기 위해 가능한 많은 문자들을 취하여 정수 값으로 변환합니다. 유효한 부호 없는 정수 값은 다음 부분들로 구성됩니다:

  • (선택 사항) 양수 또는 음수 부호
  • (선택 사항) 접두사 ( 0 ) - 8진법 기수 표시 (기수가 8 또는 0 인 경우에만 적용)
  • (선택 사항) 접두사 ( 0x 또는 0X ) - 16진법 기수 표시 (기수가 16 또는 0 인 경우에만 적용)
  • 숫자 시퀀스

base에 대한 유효한 값의 집합은 {0, 2, 3, ..., 36} 입니다. base- 2 정수에 대한 유효한 숫자 집합은 {0, 1} , base- 3 정수에 대한 유효한 숫자 집합은 {0, 1, 2} 입니다. 10 보다 큰 base의 경우, 유효한 숫자에는 알파벳 문자가 포함되며, base- 11 정수에 대한 Aa 부터 base- 36 정수에 대한 Zz 까지입니다. 문자들의 대소문자는 무시됩니다.

현재 설치된 C locale 에서 추가 숫자 형식을 허용할 수 있습니다.

base 의 값이 0 인 경우, 숫자 진법은 자동으로 감지됩니다: 접두사가 0 이면 8진법, 접두사가 0x 또는 0X 이면 16진법, 그렇지 않으면 10진법입니다.

마이너스 기호가 입력 시퀀스의 일부였다면, 숫자 시퀀스로 계산된 숫자 값은 결과 타입에서 단항 마이너스 연산자에 의해 부호가 반전되며, 이는 부호 없는 정수 래핑 규칙을 적용합니다.

이 함수는 str_end 가 가리키는 포인터를 해석된 마지막 문자 다음 문자를 가리키도록 설정합니다. 만약 str_end 가 null 포인터인 경우, 이는 무시됩니다.

목차

매개변수

str - 해석할 null로 종료되는 바이트 문자열에 대한 포인터
str_end - 문자에 대한 포인터의 포인터로, 해석된 마지막 문자 이후 위치로 설정될 수 있음
base - 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 << "Parsing '" << 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 << "range error, got ";
        }
        std::cout << i << '\n';
    }
    std::cout << "After the loop p points to '" << p << "'\n";
}

가능한 출력:

Parsing '10 200000000000000000000000000000 30 -40 - 42':
'10' -> 10
' 200000000000000000000000000000' -> range error, got 18446744073709551615
' 30' -> 30
' -40' -> 18446744073709551576
After the loop p points to ' - 42'

참고 항목

(C++11) (C++11)
문자열을 부호 없는 정수로 변환
(함수)
바이트 문자열을 정수 값으로 변환
(함수)
(C++11) (C++11)
바이트 문자열을 std::intmax_t 또는 std::uintmax_t 로 변환
(함수)
와이드 문자열을 부호 없는 정수 값으로 변환
(함수)
바이트 문자열을 부동 소수점 값으로 변환
(함수)
(C++17)
문자 시퀀스를 정수 또는 부동 소수점 값으로 변환
(함수)
바이트 문자열을 정수 값으로 변환
(함수)
C 문서 참조: strtoul , strtoull