C++資料型別
TCHAR
因為C++支援兩種字串,即常規的ANSI編碼(使用"“包裹)和Unicode編碼(使用L”“包裹),這樣對應的就有了兩套字串處理函式,比如:strlen和wcslen,分別用於處理兩種字串。
微軟將這兩套字符集及其操作進行了統一,通過條件編譯(通過_UNICODE和UNICODE巨集)控制實際使用的字符集,這樣就有了_T(”")這樣的字串,對應的就有了_tcslen這樣的函式
為了儲存這樣的通用字元,就有了TCHAR:
當沒有定義_UNICODE巨集時,TCHAR = char,_tcslen =strlen
當定義了_UNICODE巨集時,TCHAR = wchar_t , _tcslen = wcslen[1]
#ifdef UNICODE
typedef wchar_t TCHAR;
#else
typedef char TCHAR;
函式名 標頭檔案
**strcat <string.h>
wcscat <string.h> 或 <wchar.h>
**
char *strcat( char *strDestination, const char *strSource ); wchar_t *wcscat( wchar_t *strDestination, const wchar_t *strSource );
CompareString和CompareStringOrdinal函式的返回值有別於C執行庫的*cmp字串比較函式的返回值。
CompareString(Ordinal)返回0表明函式呼叫失敗,
返回CSTR_LESS_THAN(定義為1)表明pString1小於pString2,返回CSTR_EQUAL(定義為2)表明pString1等於pString2,
返回CSTR_GREATER_THAN(定義為3)表明pString1大於pString2。
為方便起見,如果函式成功,你可以從返回值中減去2,使結果值與C執行庫函式的結果值(-1, 0和+1)保持一致
CompareString的第一個引數指定一個區域設定ID(locale ID, LCID),這是一個32位值,用來標識一種語言。
可以呼叫Windows函式GetThreadLocale來得到主調執行緒的LCID:
LCID GetThreadLocale();
Unicode 與 ANSI 字串轉換
Windows函式MultiByteToWideChar將多位元組字串轉換為寬字串。
int MultiByteToWideChar(
UINT uCodePage,
DWORD dwFlags,
PCSTR pMultiByteStr,
int cbMultiByte,
PWSTR pWideCharStr,
int cchWideChar);
- 呼叫MultiByteToWideChar,為pWideCharStr引數傳入NULL,為cchWideChar引數
傳入0,為cbMultiByte引數傳入-1。 - 分配足以容納轉換後的Unicode字串的一個記憶體塊。它的大小是上一個
MultiByteToWideChar呼叫的返回值乘以sizeof(wchar_t)。 - 再次呼叫MultiByteToWideChar,這一次將緩衝區地址作為pWideCharStr引數的值
傳入,將第一次MultiByteToWideChar呼叫的返回值乘以sizeof(wchar_t)後得到的
大小作為cchWideChar引數的值傳入。 - 使用轉換後的字串。
- 釋放Unicode字串佔用的記憶體塊。
WideCharToMultiByte函式將寬字元字串轉換為多位元組字串
int WideCharToMultiByte(
UINT uCodePage,
DWORD dwFlags,
PCWSTR pWideCharStr,
int cchWideChar,
PSTR pMultiByteStr,
int cbMultiByte,
PCSTR pDefaultChar,
PBOOL pfUsedDefaultChar);