MFC

MBCS와 유니코드

윤주승 2025. 4. 3. 19:13

MBCS(Multi Byte Character Set)

 - char형

 - 영문 한 글자는 1바이트, 한글 한 글자는 2바이트

 - 버전이 낮은 VS 환경의 기본 설정

 

Unicode

 - wchar_t형

 - 영문, 한글 모두 한 글자에 2바이트 사용

 - 문자열 앞에 'L'을 붙여서 구분

 - TEXT(), _T() 매크로 사용

 

Visual Studio 6.0같은 낮은 버전에서는 MBCS가 기본 설정이였다.

그러나 NT계열로 넘어가면서 Unicode를 사용하게 된다.

원래 "Hello"라는 문자열을 사용했다면 Unicode로는 L"Hello"가 된다.

#include <iostream>

int main() {
    const char* pszBuffer = "Hello";
    const wchar_t* pwszTest = L"Hello";

    std :: cout << pszBuffer << std :: endl;
    std :: cout << pwszTest << std :: endl;
    
    return 0;
}

pszBuffer의 메모리에는 (Hello) 48 65 6c6c 6f 로 잘 들어갔다.

pwszTest의 메모리에는 (World) 57 00 6f 00 72 00 6c 00로 문자 사이사이에 널이 들어간다.

H e l l o Null
W Null o Null r Null l Null d Null

넓게 하나에 16비트(2바이트)씩 들어가서 와이드 캐릭터라 칭한다.

여기서 주소값으로 출력되니 (const char*)로 출력을 하면 제일 앞글자인 H만 출력된다.

H뒤에 Null 문자가 있기때문에 문자열이 종료된줄 알고 H만 출력하는 것이다.

TCHAR szBuffer[32] = { TEXT("TEST) };

TCHAR로 선언했을때는 내 설정이 멀티바이트 문자로 돼있으면 MBCS로, 유니코드 문자 집합 사용으로 돼있으면 유니코드형이다.

 

MFC에서 파일을 만들면 ~.exe 와 ~.dll 와 ~.lib 파일이 만들어진다.

1. 여기서 세 파일은 모두 언어(문자집합)가 통일되어야 한다.

dll이나 lib는 끌어온거기때문에 내가 맘대로 바꿀 수 없다.

2. 빌드 모드도 맞아야 한다.