블로그 이미지
Every unexpected event is a path to learning for you. blueasa

카테고리

분류 전체보기 (2794)
Unity3D (852)
Programming (478)
Server (33)
Unreal (4)
Gamebryo (56)
Tip & Tech (185)
협업 (11)
3DS Max (3)
Game (12)
Utility (68)
Etc (98)
Link (32)
Portfolio (19)
Subject (90)
iOS,OSX (55)
Android (14)
Linux (5)
잉여 프로젝트 (2)
게임이야기 (3)
Memories (20)
Interest (38)
Thinking (38)
한글 (30)
PaperCraft (5)
Animation (408)
Wallpaper (2)
재테크 (18)
Exercise (3)
나만의 맛집 (3)
냥이 (10)
육아 (16)
Total
Today
Yesterday
출처 : http://alpu.egloos.com/2968362/

Type       Size                                Support             end of string
-----------------------------------------------------------------------
SBCS       1byte                              win9X, NT              \0
-----------------------------------------------------------------------
MBCS       1byte(영문), 2byte(한글)   winNT                   \0
-----------------------------------------------------------------------
UNICODE    2byte                            winNT,CE              \0\0
-----------------------------------------------------------------------

Unicod와 MBCS/ANSI에 따라서 따로 구분해서 프로그램할 필요가 없도록 하기위해서
사용하는 것이 TCHAR 매크로임
즉, TCHAR 타입이 _UNICODE가 정의된 경우에는 wchar_t 타입으로 작동하고,
_MBCS가 정의된 경우에는 char 타입으로 작동한다.

(TCHAR 을 나타는 매크로가 _T 이다. (한문자 _T(' '), 문장 _T(" "))

#include <tchar.h>
#define _UNICODE   // ==> TCHAR를 wchar_t 형으로 대치

#define _MBCS       // ==> TCHAR를 char 형으로 대치 (default)



[ 타입 정의 ]
#ifdef UNICODE
       typedef wchar_t TCHAR;  // 2byte
#else
       typedef char TCHAR;       // 1byte
#endif

[ 함수 정의 ]
#ifdef UNICODE
      typedef SetWindowTextW SetWindowText;
#else
      typedef SetWindowTextA SetWindowText;
#endif



UNICODE가 정의 되면,
--------------------------------------------------------
TCHAR == wchar_t
TEXT == _TEXT == L



_UNICODE가 정의 되면,
--------------------------------------------------------
TCHAR == wchar_t
_T == __T == _TEXT == L


따라서 UNICODE, _UNICODE가 모두 정의 되어야 한다.


_MBCS가 정의 되면,
--------------------------------------------------------
TCHAR == char
_T == __TEXT == 사라짐



UNICODE, _UNICODE, _MBCS 중 어느것도 정의 되지 않으면,
--------------------------------------------------------
TCHAR == char
_T == __TEXT == 사라짐




[ 예) 상수 문자열 ]

LPTSTR  lpszStr = "My string";           // 문자열을 ANSI 문자열로 간주,
                                                    // 데이터형 불일치로 에러가 발생한다.

TCHAR   *lpszStr = T("My string");
LPTSTR  lpszStr = _T("My string");     // _UNICODE가 정의되어 있으면 _T()는 유니코드
                                                     // 문자열 상수로 변환하고, _MBCS가 정의되어 있으면
                                                     // ANSI 문자열 상수로 변환한다.

LPTSTR  lpszStr = TEXT("My string"); // 상동

LPWSTR  lpszStr = L("My string");       // 유니코트 문자열로 지정하는 매크로 함수 L()



[ 예) 문자열 버퍼 길이 계산 ]

#define _UNICODE

TCHAR szBuffer[200];                               // szBuffer의 크기는 400 bytes

DWORD dwlen;
dwlen = sizeof(szBuffer);                           // 400 bytes
dwlen = sizeof(szBuffer) / sizeof(TCHAR);  // 실제 저장 가능한 유니코드 문자 개수는 200개



[ 예) 표준 문자열 라이브러리 함수 ]

표준 C 런타임 함수 strlen()에 해당하는 유니코드 함수는 wcslen()이지만,
_tcslen()을 사용하면 _UNICODE, _MBCS 정의에 따라 컴파일시에 알아서 적절히 변환된다.
(tchar.h에 다 정의되어 있다.)

ANSI            Unicode          TCHAR type
--------------------------------------
strlen()        wcslen()         _tcslen()
strcat()        wcscat()         _tcscat()
strchr()        wcschr()         _tcschr()
strcmp()      wcscmp()       _tcscmp()
strcpy()       wcscpy()        _tcscpy()
strstr()         wcsstr()          _tcsstr()
strrev()        _wcsrev()        _tcsrev()

printf()         wprintf()           _tprintf()
sprintf()       swprintf()         _stprintf()
scanf()        wscanf()          _tscanf()



[ 예) ANSI 문자열과 Unicode 문자열 간의 변환 ]

(1) Multi-Byte String을 Wide Character String(유니코드)으로 변환
               mbstowcs(WCHAR *des, char *src, int BufferSize);

(2) Wide Character String(유니코드)을 Multi-Byte String으로 변환
               wcstombs(char *des, WCHAR *src, int BufferSize);



[ 타입 정의 ]

typedef CHAR *   LPSTR, *PSTR;
        CHAR * == LPSTR == PSTR

typedef CONST CHAR * LPCSTR, *PCSTR;
        CONST CHAR * == LPCSTR == PCSTR

LPTSTR   = TCHAR *

LPCTSTR = CONST TCHAR *

반응형

'Programming > C/C++' 카테고리의 다른 글

[펌] 순수 가상 소멸자  (2) 2010.05.06
C/C++에서 assert  (0) 2010.05.03
[C]#pragma - once, pack, warning, comment, link  (0) 2010.04.16
다른방식의 싱글톤  (0) 2010.04.15
조건문의 최적화 방법  (0) 2010.04.14
Posted by blueasa
, |