我們知道,C語言用char數據類型表示一個8位的ANSI字符,默認在代碼中聲明一個字符串時,C編譯器會把字符串中的字符轉換成由8位char數據類型構成的一個數組:
// An 8-bit character char c = 'A'; // An array of 99 8-bit character and 8-bit terminating zero char szBuffer[100] = "A String";
Microsoft的C/C++編譯器定義了一個內建的數據類型wchar_t,它表示一個16位的Unicode(UTF-16)字符。編譯器只有指定了/Zc:wchar_t編譯器開關時,才會定義這個參數類型。
聲明Unicode字符和字符串的方法如下:
// A 16-bit character wchar_t c= L'A'; // An array up to 99 16-bit characters and a 16-bit terminating zero wchar_t szBuffer[100] = L"A String";
字符串之前的大寫字母L通知編譯器該字符串應該編譯一個Unicode字符串。
另外,在編寫代碼的時候,可以使用ANSI或Unicode字符/字符串使其能通過編譯。WinNT.h定義了以下類型和宏:
#ifdef UNICODE typedef WCHAR TCHAR, *PTCHAR, PTSTR; typedef CONST WCHAR *PCTSTR; #define __TEXT(quote) L##quote #else typedef CHAR TCHAR, *PTCHAR, PTSTR; typedef CONST CHAR *PCTSTR; #define __TEXT(quote) quote #endif #define TEXT(quote) __TEXT(quote)
利用這些類型和宏來寫代碼,無論使用ANSI還是Unicode字符,都能通過編譯,如下所示:
// If UNICODE define, a 16-bit character; else an 8-bit character TCHAR c = TEXT('A'); // If UNICODE define, an array of 16-bit character; else 8-bit character TCHAR szBuffer[100] = TEXT("A String");