SBCS ( Single Byte Character Set ) 

: 1바이트만 사용 하는 문자

: 예 - 아스키코드(ASCII Code)


MBCS ( Multi Byte Character Set )

 : 한글은 2바이트, 영문은 1바이트를 사용하는 문자

 : 예 - EUC-KR, CP949 등


WBCS ( Wide Byte Charater Set )

 : 2바이트만 사용!

 : 예 - 유니코드(Unicode)




일반적으로 사용하는 char, strlen은 SBCS 기반의 함수

wchar_t 는 WBCS 기반의 변수 즉 2바이트이다.

즉, 문자열 사용시 고려해주지 않으면 오류가 난다.



wchar_t str[] = "ABCD가나다라";

// 오른쪽은 MBCS 기반의 문자자료형 왼쪽은 유니코드 기반의 문자자료형

// 오른쪽 문자열 앞에 L을 붙여주면 WBCS 기반의 문자열로 표현하게 된다.

// 즉 한, 영 모두 2바이트


wchar_t str[] = L"ABCD가나다라";

// 수정된 코드

// but. strlen을 쓰려고 하면 오류가 난다.

// 문자열은 WBCS 이지만 함수는 SBCS이기 때문(char을 인수로 받는다)

// 따라서 SBCS 기반의 함수가 아닌 WBCS 기반의 문자열 함수를 이용해야한다.




SBCS 기반의 함수 

 WBCS 기반의 함수

strlen

strcpy

strcat

strcmp

.

printf

scanf

wcslen

wcscpy

wcscat

wcscmp

.

wprintf

wscanf


* _wsetlocale(LC_ALL, L"korea");     - 유니코드 기반으로 한글을 출력할 때 꼭 호출해 주어야 하는 함수.

- 이 함수를 통해 각 나라의 언어로 표현할 수 있게 된다.




Q MBCS 기반의 프로그램을 만들다가 WBCS 기반의 프로그램으로 바꾸려면 ?

 : (1) 일일히 문자열 앞에 L을 붙이고 SBCS 기반의 함수를 WBCS 기반의 함수로 바꾸어 준다.

BUT. 비효율적, 큰 프로젝트 일수록 수정이 힘들어 진다.

 : (2) TCHAR 등 따로 정의된 변수명을 이용한다.



출처 및 자세한 사항 : http://blog.eairship.kr/217


+ Recent posts