從前寫好的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
沒有留言:
張貼留言