C/C++의 wcstoll() 함수는 와이드 문자열(wide character string)을 long long 정수로 변환하는 데 사용됩니다. 이 함수는 마지막 유효 문자 다음에 오는 첫 번째 문자를 가리키도록 포인터를 설정하며, 숫자로 변환할 수 없는 부분이 어디서 시작되는지 파악할 때 유용합니다.
wcstoll() 함수 문법
long long wcstoll(const wchar_t* str, wchar_t** str_end, int base)
wcstoll() 함수는 총 세 개의 인자를 받습니다.
- str: 변환을 시작할 와이드 문자열의 시작 주소입니다.
- str_end: 함수가 설정하는 출력용 포인터입니다. 마지막으로 변환된 유효 문자 뒤의 첫 번째 문자를 가리키며, 더 이상 남은 문자가 없으면 NULL을 가리킵니다.
- base: 변환에 사용할 진법을 지정합니다. 지원되는 값은 0, 2, 3, ..., 35, 36까지입니다.
함수는 변환된 long long 정수를 반환합니다. 만약 문자열이 NULL을 가리키거나 변환 가능한 숫자가 없으면 0을 반환합니다.
예제 1: 10진수(base = 10) 변환
#include <iostream>
using namespace std;
main() {
// 두 개의 와이드 문자열 정의
wchar_t string1[] = L"777HelloWorld";
wchar_t string2[] = L"565Hello";
wchar_t* End; // 끝 포인터
int base = 10;
int value;
value = wcstoll(string1, &End, base);
wcout << "문자열 값 = " << string1 << "\n";
wcout << "Long Long Int 값 = " << value << "\n";
wcout << "남은 문자열 = " << End << "\n"; // 정수 뒤에 남은 문자열
value = wcstoll(string2, &End, base);
wcout << "\n문자열 값 = " << string2 << "\n";
wcout << "Long Long Int 값 = " << value << "\n";
wcout << "남은 문자열 = " << End; // 정수 뒤에 남은 문자열
}출력 결과
The string Value = 777HelloWorld Long Long Int value = 777 End String = HelloWorld The string Value = 565Hello Long Long Int value = 565 End String = Hello
위 예제에서 볼 수 있듯이, wcstoll()은 문자열 앞부분의 숫자만 읽어 정수로 변환하고, str_end 포인터는 숫자가 끝난 직후 위치(여기서는 'H')를 가리킵니다. 덕분에 변환 후 남은 문자열도 손쉽게 확인할 수 있습니다.
예제 2: 16진수(base = 16) 변환
이번에는 진법(base) 값을 16으로 설정한 예제입니다. 16진수 형식의 문자열을 입력하면 그에 맞게 해석하여 10진수 값으로 출력합니다.
#include <iostream>
using namespace std;
main() {
// 두 개의 와이드 문자열 정의
wchar_t string1[] = L"5EHelloWorld";
wchar_t string2[] = L"125Hello";
wchar_t* End; // 끝 포인터
int base = 16;
int value;
value = wcstoll(string1, &End, base);
wcout << "문자열 값 = " << string1 << "\n";
wcout << "Long Long Int 값 = " << value << "\n";
wcout << "남은 문자열 = " << End << "\n"; // 정수 뒤에 남은 문자열
value = wcstoll(string2, &End, base);
wcout << "\n문자열 값 = " << string2 << "\n";
wcout << "Long Long Int 값 = " << value << "\n";
wcout << "남은 문자열 = " << End; // 정수 뒤에 남은 문자열
}출력 결과
The string Value = 5EHelloWorld Long Long Int value = 94 End String = HelloWorld The string Value = 125Hello Long Long Int value = 293 End String = Hello
첫 번째 문자열의 "5E"는 16진수로 해석되면 10진수로 94(5×16 + 14)가 되고, 두 번째 문자열의 "125"는 16진수 기준으로 293(1×256 + 2×16 + 5)이 됩니다. 이처럼 base 인자를 활용하면 동일한 문자열이라도 진법에 따라 전혀 다른 값으로 변환할 수 있습니다.
정리
wcstoll() 함수는 와이드 문자열에서 숫자 부분만 추출해 long long 정수로 변환하고, 나머지 문자열의 시작 위치를 str_end 포인터를 통해 알려주는 강력한 도구입니다. 진법 지정 기능까지 갖추고 있어 2진수부터 36진수까지 다양한 형식의 문자열을 유연하게 처리할 수 있습니다.