티스토리 뷰

반응형

멀티바이트 문자열을 유니코드 문자열로 변경하는 방법

1. MultiByteToWideChar() 함수를 사용하는 방법.

이 함수는 Windows API의 일부이며, 다음과 같은 매개 변수를 사용합니다.
- CodePage: 변환할 멀티바이트 문자열의 코드 페이지

- dwFlags: 변환 방법을 지정 (일반적으로 0으로 설정)
- lpMultiByteStr: 변환할 멀티바이트 문자열의 포인터
- cchMultiByte: 변환할 멀티바이트 문자열의 길이 (-1로 설정하면 자동으로 계산됨)
- lpWideCharStr: 변환된 유니코드 문자열을 저장할 버퍼의 포인터
- cchWideChar: 변환된 유니코드 문자열의 버퍼 길이 (MultiByteToWideChar 함수는 변환된 문자열의 길이를 반환함)

 

void MultiByteToUnicode(const char* mbString, wchar_t* unicodeString, int len)
{
    int result = MultiByteToWideChar(CP_ACP, 0, mbString, -1, unicodeString, len);
    if (result == 0) // 변환 실패
    {
        DWORD error = GetLastError();
        // 에러 처리
    }
}

// 유니코드 문자열을 멀티바이트 문자열로
void UnicodeToMultiByte(const wchar_t* unicodeString, char* mbString, int len)
{
    int result = WideCharToMultiByte(CP_ACP, 0, unicodeString, -1, mbString, len, NULL, NULL);
    if (result == 0) // 변환 실패
    {
        DWORD error = GetLastError();
        // 에러 처리
    }
}

 

2. CString 클래스를 사용하는 방법
MFC에서는 CString 클래스를 사용하여 멀티바이트 문자열과 유니코드 문자열을 모두 다룰 수 있습니다. CString 클래스는 TCHAR 데이터 형식을 기반으로 하며, TCHAR는 char 또는 wchar_t 중 하나로 정의됩니다.
CStringA 클래스는 멀티바이트 문자열을 다루며, CStringW 클래스는 유니코드 문자열을 다룹니다. CString 클래스는 이 둘을 자동으로 변환해 주므로, 멀티바이트 문자열과 유니코드 문자열을 서로 변환하는 과정이 필요하지 않습니다.

아래 소스 참조 바랍니다.

CStringA mbString("안녕하세요");
CStringW unicodeString(mbString);

// 유니코드 문자열을 멀티바이트 문자열로
CStringW unicodeString(L"안녕하세요");
CStringA mbString(unicodeString);

 

3. ATL(MFC의 경량 버전)에서 제공하는 ATL::CA2W 클래스를 사용하는 방법
ATL에서는 멀티바이트 문자열을 유니코드 문자열로 변환하기 위해 ATL::CA2W 클래스를 제공합니다. 이 클래스는 멀티바이트 문자열을 ATL 스트링으로 변환한 뒤, 이를 유니코드 문자열로 변환합니다.

CStringA mbString("안녕하세요");
ATL::CA2W unicodeString(mbString);

// 유니코드 문자열을 멀티바이트 문자열로
CStringW unicodeString(L"안녕하세요");
ATL::CW2A mbString(unicodeString);

 

개인적으로 학습하면서 정리한 내용입니다.

잘못된 내용이 있을 경우 알려주시면 확인 후 수정 및 반영하도록 하겠습니다.

 

오늘도 감사합니다.(__)>