WCHAR,CHAR,TCHAR的区别
現在C++的字符分成兩種類型wchar_t和char。??
其中???WCHAR==wchar_t,CHAR==char。??
TCHAR是一種條件編譯的類型,根據條件可以代表wchar_t或char。??
CHAR實施上就是unsigned char,
WCHAR為寬字符,
而TCHAR根據是否支持unicode而不同。
在程序使用sizeof(TCAHR),當默認設置時,這個值是1;
當定義UNICODE宏時,這個值是2。?
?
WCHAR,CHAR,TCHAR的關系實際上是這樣的??
???
#ifdef???UNICODE????
??????????typedef???wchar_t???TCHAR;????
#else????
??????????typedef???unsigned???char???TCHAR;????
#endif????
?????
typedef???unsigned???char???CHAR;????
typedef???unsigned???wchar_t???WCHAR;?
?
Windows使用兩種字符集ANSI和UNICODE, 前者就是通常使用的單字節方式,但這種方式處理象中文這樣的雙字節字符不方便,容易出現半個漢字的情況。 而后者是雙字節方式,方便處理雙字節字符。 Windows NT的所有與字符有關的函數都提供兩種方式的版本,而Windows 9x只支持ANSI方式。_T一般同字常數相關,如_T("Hello")。如果你編譯一個程序為ANSI方式,_T實際不起任何作用。 而如果編譯一個程序為UNICODE方式,則編譯器會把"Hello"字符串以UNICODE方式保存。 _T()和_L()的區別在于,_L不管你是以什么方式編譯,一律以以 UNICODE方式保存。 ? Visual C++里邊定義字符串的時候,用_T來保證兼容性,VC支持ascii和unicode兩種字符類型,用_T可以保證從ascii編碼類型轉換到unicode編碼類型的時候,程序不需要修改。 unicode,第個字符使用2個字節,包含了世界上幾乎所有語言,每種語言的每一個字符在unicode里的值都是惟一的。 ASCII 碼使用指定的 7 位或 8 位二進制數組合來表示 128 或 256 種可能的字符。標準 ASCII 碼也叫基礎ASCII碼,使用 7 位二進制數來表示所有的大寫和小寫字母,數字 0 到 9、標點符號, 以及在美式英語中使用的特殊控制字符。不能適用于多語言平臺。 ANSI 為使計算機支持更多語言,通常使用 0x80~0xFF 范圍的 2 個字節來表示 1 個字符。比如:漢字 '中' 在中文操作系統中,使用 [0xD6,0xD0] 這兩個字節存儲。 不同的國家和地區制定了不同的標準,由此產生了 GB2312, BIG5, JIS 等各自的編碼標準。這些使用 2 個字節來代表一個字符的各種漢字延伸編碼方式,稱為 ANSI 編碼。在簡體中文系統下,ANSI 編碼代表 GB2312 編碼,在日文操作系統下,ANSI 編碼代表 JIS 編碼。? 不同 ANSI 編碼之間互不兼容,當信息在國際間交流時,無法將屬于兩種語言的文字,存儲在同一段 ANSI 編碼的文本中。 |
總結
以上是生活随笔為你收集整理的WCHAR,CHAR,TCHAR的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 开窗函数的意义与用法
- 下一篇: 实战串行通讯