basic_string_stoul

basic_string_stoul (문자열을 부호 없는 정수로 변환)

이 페이지는 C++ 표준 라이브러리에서 문자열을 부호 없는 정수로 변환하는 std::stoulstd::stoull 함수에 대해 다루고 있어요. 이 함수들은 <string> 헤더에 정의되어 있으며, C++11부터 사용할 수 있어요. 문자열에서 숫자 부분을 해석해 unsigned long 또는 unsigned long long 타입의 값으로 변환해 줘요.

출처: cppreference

본문

함수 개요

다음은 <string> 헤더에 정의된 함수들의 원형이에요.

Defined in header
unsigned long stoul ( const std :: string & str , std :: size_t * pos = nullptr , int base = 10 ); (1) (since C++11)
unsigned long stoul ( const std :: wstring & str , std :: size_t * pos = nullptr , int base = 10 ); (2) (since C++11)
unsigned long long stoull ( const std :: string & str , std :: size_t * pos = nullptr , int base = 10 ); (3) (since C++11)
unsigned long long stoull ( const std :: wstring & str , std :: size_t * pos = nullptr , int base = 10 ); (4) (since C++11)

동작 방식

이 함수들은 문자열 str에서 부호 없는 정수 값을 해석해요. 내부적으로 변환 함수가 사용하는 ptr이라는 포인터가 있는데, (1)과 (3)에서는 char* 타입, (2)과 (4)에서는 wchar_t* 타입이에요.

먼저 std::isspace를 호출해 식별되는 공백 문자들을 첫 번째 비공백 문자가 나올 때까지 모두 버려요. 그런 다음 가능한 한 많은 문자를 사용해 유효한 밑이 n(여기서 nbase)인 부호 없는 정수 숫자 표현을 만들고, 그 값을 정수로 변환해요. 유효한 부호 없는 정수 값은 다음 부분들로 구성돼요:

  • (선택) 플러스 또는 마이너스 부호
  • (선택) 8진수를 나타내는 접두사 0 (base가 8 또는 0일 때만 적용)
  • (선택) 16진수를 나타내는 접두사 0x 또는 0X (base가 16 또는 0일 때만 적용)
  • 숫자들의 연속

base로 유효한 값의 집합은 {0, 2, 3, ..., 36}이에요. 밑이 2인 정수에 유효한 숫자는 {0, 1}이고, 밑이 3인 정수에 유효한 숫자는 {0, 1, 2}이며, 이런 식으로 계속돼요. 10보다 큰 밑에서는 알파벳 문자도 유효한 숫자에 포함되는데, 밑이 11인 정수부터 Aa로 시작해 밑이 36인 정수에서는 Zz까지 사용돼요. 문자의 대소문자는 구분하지 않아요.

현재 설치된 C 로케일에 따라 추가적인 숫자 형식이 허용될 수도 있어요.

base 값이 0이면 숫자의 밑이 자동으로 감지돼요. 접두사가 0이면 8진수, 접두사가 0x 또는 0X이면 16진수, 그 외에는 10진수로 간주해요.

입력 시퀀스에 마이너스 부호가 포함되어 있다면, 숫자 시퀀스에서 계산된 숫자 값은 결과 타입에서 단항 마이너스를 적용한 것처럼 부정되는데, 이때 부호 없는 정수 오버플로 규칙이 적용돼요.

pos가 널 포인터가 아니라면, ptrstr.c_str()에서 변환되지 않은 첫 번째 문자의 주소를 받게 되고, 그 문자의 인덱스가 계산되어 *pos에 저장돼요. 이는 변환으로 처리된 문자의 수를 나타내요.

매개변수

str - 변환할 문자열
pos - 처리된 문자 수를 저장할 정수의 주소
base - 숫자의 밑

반환값

지정된 부호 없는 정수 타입으로 변환된 문자열이에요.

예외

  • 변환을 수행할 수 없으면 std::invalid_argument를 던져요.
  • 변환된 값이 결과 타입의 범위를 벗어나거나, 내부 함수(std::strtoul 또는 std::strtoull)가 errnoERANGE로 설정하면 std::out_of_range를 던져요.

예제

이 섹션은 불완전해요. 이유: 예제 없음

결함 보고서

다음 동작 변경 결함 보고서는 이전에 발표된 C++ 표준에 소급 적용되었어요.

DR 적용 대상 발표된 동작 올바른 동작
LWG 2009 C++11 std::strtoul 또는 std::strtoullerrnoERANGE로 설정해도 std::out_of_range가 던져지지 않았음 던져질 것임

같이 보기

stoi stol stoll (C++11) (C++11) (C++11) 문자열을 부호 있는 정수로 변환 (함수) [edit]
stof stod stold (C++11) (C++11) (C++11) 문자열을 부동소수점 값으로 변환 (함수) [edit]

더 알아보기 (Learn more)

cppreference