2018年6月13日 星期三

[C++]中LPCTSTR、CString、char *、string之間的相互轉換


C++LPCTSTRCStringchar *string之間的相互轉換

字元集

VC2012中,字元集默認採用Unicode字元集(Use Unicode Charecter Set選項),其值還可以設置為多位元組字元集(Use Multi-Byte Charecter Set)

為什麼要使用Unicode

1.     可以很容易地在不同語言之間進行資料交換。

2.    使你能夠分配支援所有語言的單個二進位.exe文件或DLL文件。

3.    提高應用程式的運行效率。

Windows 2000是使用Unicode從頭進行開發的,如果調用任何一個Windows函數並給它傳遞一個ANSI字串,那麼系統首先要將字串轉換成Unicode,然後將Unicode字串傳遞給作業系統。如果希望函數返回ANSI字串,系統就會首先將Unicode字串轉換成ANSI字串,然後將結果返回給你的應用程式。進行這些字串的轉換需要佔用系統的時間和記憶體。通過從頭開始用Unicode來開發應用程式,就能夠使你的應用程式更加有效地運行。
Microsoft
公司將COM16Windows轉換成Win32時,公司決定需要字串的所有COM介面方法都只能接受Unicode字串。

Windows定義的Unicode資料類型有哪些

WCHAR Unicode字元;
PWSTR
指向Unicode字串的指標;
PCWSTR
指向一個恒定的Unicode字串的指標;
對應的ANSI資料類型為CHARLPSTRLPCSTR;
ANSI/Unicode
通用資料類型為TCHARPTSTR,LPCTSTR

如何對Unicode進行操作

ANSI 操作函數以str開頭 strcpy
Unicode
操作函數以wcs開頭 wcscpy
MBCS
操作函數以_mbs開頭 _mbscpy
ANSI/Unicode
操作函數以_tcs開頭 _tcscpyC運行期庫)
ANSI/Unicode
操作函數以lstr開頭 lstrcpyWindows函數)
所有新的和未過時的函數在Windows2000中都同時擁有ANSIUnicode兩個版本。ANSI版本函數結尾以A表示;Unicode版本函數結尾以W表示。Windows會如下定義:

[cpp] view plain copy

1.   #ifdef UNICODE  

2.    #define CreateWindowEx CreateWindowExW  

3.    #else  

4.    #define CreateWindowEx CreateWindowExA  

5.    

沒有留言:

張貼留言