Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C/C++ wcstoll() 함수 완벽 가이드 – 와이드 문자열을 long long 정수로 변환하기

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진수까지 다양한 형식의 문자열을 유연하게 처리할 수 있습니다.