본문 바로가기

CAT-Security/미분류

TCHAR, _tmain등 (SBCS, MBCS, WMCS)의 이해 및 정리

1. 문자셋의 종류와 특성

- 문자셋 (Character Sets) : 약속된 문자의 저장과 표현방법, 대표적으로 아스키코드와 유니코드가 있음.

- 아스키코드 (ASCII CODE) : 영어 및 확장문자 256개 표현. 1 바이트.

- 유니코드 (UNICODE) : 전 세계 모든 문자 표현. 65,536 개 표현가능. 2 바이트.


- 문자셋의 종류

1) SBCS (Single Byte Character Set)

- 문자 저장과 표현에 1 바이트만 사용. 아스키코드가 해당됨.

 

2) MBCS (Multe Byte Character Set)

- 문자 저장과 표현에 1 바이트 혹은 2 바이트를 사용.

- MBCS 는 SBCS 를 포함한다. 대부분의 문자들을 2 바이트로 처리하되, 경우에 따라서 1 바이트로 처리한다. 즉, 아스키코드에서 정의하는 문자들을 처리할 경우 1 바이트, 아스키코드에서 정의하지 않는 문자를 처리할 경우 2 바이트로 처리한다.

- 효율적이나 프로그램 구현에 있어 세심한 주의가 필요하다.

- 유니코드는 아님

 

3) WBCS (Wide Byte Character Set)

- 문자 저장과 표현에 2 바이트만 사용. 유니코드가 해당됨.

- 안정적이므로 많이 사용 됨







2. 자료형을 정의하는 이유

1. 선언의 편리성

긴문장 대신 간결하고 의미도 보다 강력하게 부여된 이름을 변수 선언시에 사용 한다.


2. 확장의 용이성

typedef unsigned char STR_LEN -> typedef unsigned int STR_LEN

(단 한번의 수정으로 STR_LEN 자료형을 쓰는 모든 변수를 캐릭터형에서 인트형으로 확장 시켰다.)






MBCS와 WBCS를 동시에 지원하기 위한 매크로

MBCS와 WBCS를 동시에 지원한다는 말은 곧, 아스키코드와 유니코드를 동시에 지원한다는 말과 일치한다고 봐도 된다.
Windows에서는 MBCS와 WBCS를 동시에 수용하는 형태의 프로그램 구현을 위해서 매크로를 정의하고 있다.

tchar.h의 일부를 보기 좋은 구조로 간략화 한 것

 #ifdef UNICODE
    typedef WCHAR     TCHAR;
    typedef LPWSTR    LPTSTR;
    typedef LPCWSTR  LPCTSTR;
#else
    typedef CHAR     TCHAR;
    typedef LPSTR    LPTSTR;
    typedef LPCSTR  LPCTSTR;

위 매크로가 어떻게 동작되는지 예를 들어 보자.
다음과 같이 선언된 배열이 있다.

TCHAR arr[10];

만약 UNICODE라는 매크로가 정의되어 있지 않으면, MBCS 기반, UNICODE라는 매크로가 정의되어 있으면, WBCS 기반의 문자열 저장이 가능하게 한다.


'CAT-Security > 미분류' 카테고리의 다른 글

[시스템 기초] 스터디(3주차)  (0) 2012.11.27
리그 오브 레전드 첫 금장  (0) 2012.11.24
[문제풀이] abexcm5 분석  (0) 2012.11.22
스터디 3주차  (0) 2012.11.18
아파치 설정법 모음  (0) 2012.11.13