1. SBCS ( Single Byte Character Set )

문자를 표현하는데 있어서 1바이트만을 사용하는 방식으로, ASCII 코드가 대표적이다.


2. MBCS ( Multi Byte Character Set )

동일한 바이트 수로 문자를 표현하는게 아니라 , 다양한 바이트 수를 사용해서 문자를 표현하는 방식이다.
예를들면 어떤 문자는 1바이트로 표현하고 어떤 문자는 2바이트로 표현한다.
MBCS는 SBCS를 포함하는데, 대부분의 문자들을 2바이트로 처리하되, 아스키코드에서 정의하고 있는 문자를
표현할 때는 1바이트로 처리한다. 즉 MBCS 에서는 영어는 1바이트로, 한글은 2바이트로 처리한다.
굉장히 효율적인 방법이라 생각할 수 있지만, 구현하기에는 굉장히 까다롭다.


3. WBCS ( Wide Byte Character Set )

모든 문자를 2바이트로 표현하는 문자셋이다.
대표적으로 유니코드가 WBCS 에 해당하며, 유니코드 기반 문자열이라고도 한다.



WBCS 기반의 프로그램을 만들기 위해서는 몇 가지 중요한 점이 있다.

1.  char - > wchar_t
- 문자를 표현하는데 사용되는 자료형 char 를 대신해서 자료형 wchar_t 를 사용한다.
- char은 1바이트 메모리 공간만 할당되지만, wchar_t 는 2바이트 메모리 공간이 할당된다.
- 따라서 유니코드 기반의 문자표현이 가능하다.
- typedef unsigned short wchar_t

2. ABC  ->   L"ABC"
- wchar_t str[] = "ABC"  로 할 경우 오류가 생기는데, wchar_t 는 유니코드 문자형식이지만
- 오른쪽 "ABC" 는 MBCS 기반이기 때문이다. 그러므로 다음 형태로 바꿔줘야 한다.
- wchar_t str[] = L"ABC"
- 여기서 L 은 다음에 나오는 문자열을 유니코드 기반으로 표현하라는 의미이다. 널 문자도 2바이트로 처리되므로 총 8바이트!

3.  strlen  -> wcslen
- strlen 은 SBCS 기반이므로 wcslen 으로 (WBCS 기반) 으로 바꿔서 사용해야 한다.
- 사용법이나 전달인자의 개수 등은 완전히 동일하므로 어려울 것은 없다.


 SBCS 기반 함수  WBCS 기반 함수
 strlen  size_t [각주:1] wcslen
 strcpy  wcscpy
 strncpy  wcsncpy 
 strcat  wcscat 




4. 완전한 유니코드 기반 (1)

윈도우 2000 이상의 운영체제에서는 이제 기본적으로 유니코드를 지원하며, 내부적으로도 모든 문자열을 유니코드
기반으로 처리한다. 그러므로 유니코드 기반으로 프로그램을 작성하지 않는다면 성능에 영향을 미칠 수 있다.

wprintf( L"Hello World");

위 문장은 printf 함수의 유니코드 버전이며, 다음은 문자열 입출력 함수 중 WBCS 기반의 예이다.
 SBCS 기반 함수  WBCS 기반 함수 
 printf  int wprintf 
 scanf  int wscanf 
 fgets  wchar_t * fgetws 
 fputs  int fputws 





5. 완전한 유니코드 기반 (2)

main  ->  wmain(int argc, wchar_t* argv[])

본래의 main 함수의 argv 는 char* 형식 (SBCS) 이고 argv[]를 wchar_t* argv[] 로 바꾸더라도 main함수는 실행 시 전달되는 문자열을 MBCS 기반으로 구성하기 때문에 엉뚱한 출력결과가 보일 것이다.
그러므로 유니코드 기반의 main함수를 사용해야 하는데 그것이 바로 wmain 함수이다.



  1. typedef unsigned int size_t [본문으로]

+ Recent posts