basic_string_stoul
basic_string_stoul (문자열을 부호 없는 정수로 변환)
이 페이지는 C++ 표준 라이브러리에서 문자열을 부호 없는 정수로 변환하는 std::stoul과 std::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(여기서 n은 base)인 부호 없는 정수 숫자 표현을 만들고, 그 값을 정수로 변환해요. 유효한 부호 없는 정수 값은 다음 부분들로 구성돼요:
- (선택) 플러스 또는 마이너스 부호
- (선택) 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가 널 포인터가 아니라면, ptr은 str.c_str()에서 변환되지 않은 첫 번째 문자의 주소를 받게 되고, 그 문자의 인덱스가 계산되어 *pos에 저장돼요. 이는 변환으로 처리된 문자의 수를 나타내요.
매개변수
| str | - | 변환할 문자열 |
|---|---|---|
| pos | - | 처리된 문자 수를 저장할 정수의 주소 |
| base | - | 숫자의 밑 |
반환값
지정된 부호 없는 정수 타입으로 변환된 문자열이에요.
예외
- 변환을 수행할 수 없으면
std::invalid_argument를 던져요. - 변환된 값이 결과 타입의 범위를 벗어나거나, 내부 함수(
std::strtoul또는std::strtoull)가errno를ERANGE로 설정하면std::out_of_range를 던져요.
예제
| 이 섹션은 불완전해요. 이유: 예제 없음 |
|---|
결함 보고서
다음 동작 변경 결함 보고서는 이전에 발표된 C++ 표준에 소급 적용되었어요.
| DR | 적용 대상 | 발표된 동작 | 올바른 동작 |
|---|---|---|---|
| LWG 2009 | C++11 | std::strtoul 또는 std::strtoull이 errno를 ERANGE로 설정해도 std::out_of_range가 던져지지 않았음 |
던져질 것임 |
같이 보기
| stoi stol stoll (C++11) (C++11) (C++11) | 문자열을 부호 있는 정수로 변환 (함수) [edit] |
|---|---|
| stof stod stold (C++11) (C++11) (C++11) | 문자열을 부동소수점 값으로 변환 (함수) [edit] |