2013/08/06

[VC] UNICODE 下的字串

從前寫好的ANSI CODE,在要編譯成UNICODE時,常會遇到字元bytes數問題,
往往都需在字串前強制加上L轉型成wchar;不過L到底是啥意思咧?

以下簡單介紹:

1. L"string"
表示將 ANSI字串轉換成unicode字串,就是每個英數字佔用兩個byte。

2. _T("string")
根據你的環境設置,編譯器會根據編譯目標環境選擇合適的(Unicode還是ANSI)字符處理方式。
如果你定義了UNICODE,那麼_T會把字符串前面加一個L。即此時的 _T("ABCD") 等同於 L"ABCD"。 
如果沒有定義 UNICODE,那麼_T不會在字符串前面加那個L,_T("ABCD") 就等價於 "ABCD"

3. TEXT("str")、_TEXT("str")、_T("str")
這三個MACRO都是一樣的意思,即交由編譯器自動判斷。
如下面三語句:   
TCHAR   szStr1[]   =   TEXT("str1");   
char   szStr2[]   =   "str2";   
WCHAR   szStr3[]   =   L("str3");   

當環境設置為UNICODE時,szStr1與str3所佔bytes數相等,
當環境未設置為UNICODE時,szStr1與str2所佔bytes數相等,

無論環境是否設置UNICODE,
str2永遠生成ANSI字串
str3永遠生成UNICODE字串

引用結論:為了程序的可移植性,建議盡量使用_T()表示字串。   

ref. http://www.cnblogs.com/txwsh1/archive/2008/03/06/1093335.html

沒有留言:

張貼留言