C++中LPCTSTR、CString、char *、string之間的相互轉換
字元集
在VC2012中,字元集默認採用Unicode字元集(Use Unicode Charecter Set選項),其值還可以設置為多位元組字元集(Use Multi-Byte Charecter Set)。
1. 可以很容易地在不同語言之間進行資料交換。
2. 使你能夠分配支援所有語言的單個二進位.exe文件或DLL文件。
3. 提高應用程式的運行效率。
Windows 2000是使用Unicode從頭進行開發的,如果調用任何一個Windows函數並給它傳遞一個ANSI字串,那麼系統首先要將字串轉換成Unicode,然後將Unicode字串傳遞給作業系統。如果希望函數返回ANSI字串,系統就會首先將Unicode字串轉換成ANSI字串,然後將結果返回給你的應用程式。進行這些字串的轉換需要佔用系統的時間和記憶體。通過從頭開始用Unicode來開發應用程式,就能夠使你的應用程式更加有效地運行。
Microsoft公司將COM從16位Windows轉換成Win32時,公司決定需要字串的所有COM介面方法都只能接受Unicode字串。
WCHAR Unicode字元;
PWSTR 指向Unicode字串的指標;
PCWSTR 指向一個恒定的Unicode字串的指標;
對應的ANSI資料類型為CHAR,LPSTR和LPCSTR;
ANSI/Unicode通用資料類型為TCHAR,PTSTR,LPCTSTR。
ANSI 操作函數以str開頭 strcpy
Unicode 操作函數以wcs開頭 wcscpy
MBCS 操作函數以_mbs開頭 _mbscpy
ANSI/Unicode 操作函數以_tcs開頭 _tcscpy(C運行期庫)
ANSI/Unicode 操作函數以lstr開頭 lstrcpy(Windows函數)
所有新的和未過時的函數在Windows2000中都同時擁有ANSI和Unicode兩個版本。ANSI版本函數結尾以A表示;Unicode版本函數結尾以W表示。Windows會如下定義:
[cpp] view plain copy
1. #ifdef UNICODE
2. #define CreateWindowEx CreateWindowExW
3. #else
4. #define CreateWindowEx CreateWindowExA
5.
沒有留言:
張貼留言