1. 程式人生 > >C++資料型別

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);
  1. 呼叫MultiByteToWideChar,為pWideCharStr引數傳入NULL,為cchWideChar引數
    傳入0,為cbMultiByte引數傳入-1。
  2. 分配足以容納轉換後的Unicode字串的一個記憶體塊。它的大小是上一個
    MultiByteToWideChar呼叫的返回值乘以sizeof(wchar_t)。
  3. 再次呼叫MultiByteToWideChar,這一次將緩衝區地址作為pWideCharStr引數的值
    傳入,將第一次MultiByteToWideChar呼叫的返回值乘以sizeof(wchar_t)後得到的
    大小作為cchWideChar引數的值傳入。
  4. 使用轉換後的字串。
  5. 釋放Unicode字串佔用的記憶體塊。

WideCharToMultiByte函式將寬字元字串轉換為多位元組字串

int WideCharToMultiByte(
	UINT uCodePage,
	DWORD dwFlags,
	PCWSTR pWideCharStr,
	int cchWideChar,
	PSTR pMultiByteStr,
	int cbMultiByte,
	PCSTR pDefaultChar,
	PBOOL pfUsedDefaultChar);