pretty code

2009年3月20日 星期五

陌生的寬字元

個人習慣 C 語言的簡單俐落
再加上之前使用的 GUI framework 底層還未考慮到 unicode 的問題
故我對寬字元的操作其實是很陌生的
上網查了一下相關資料



typedef unsigned short wchar_t;
typedef wchar_t WCHAR;

WCHAR windows獨有之型態
但 wchar_t 是 C 語言所支援的


#ifdef UNICODE
typedef WCHAR TCHAR;
#else
typedef char TCHAR;
#endif

const TCHAR* s = _T"test";
UINCODE
const WCHAR* s = L"test";
ASCII
const char* s = "test";

LPCTSTR是什麼?

L: Long
P: Pointer
C: Const

"long pointer to a constant generic string"
表示“一個指向一般字串常量的長指標類型”
就是之前看到的const TCHAR* (字串指標)。

// Unicode(WCHAR) to ANSI(char)
TCHAR *pUnicode = _T("你好");
int nIndex = WideCharToMultiByte(CP_ACP, 0, pUnicode, -1, NULL, 0, NULL, NULL);
char *pAnsi = new char[nIndex+1];
WideCharToMultiByte(CP_ACP, 0, pUnicode, -1, pAnsi, nIndex, NULL, NULL);
delete pAnsi;

「多位元組字元」 (mb, multi-byte character)
「多位元組字串」 (mbs, multi-byte string)
「寬字元字串」 (wcs, wide character string)

沒有留言: