前言
本文並不嘗試列舉出所有的轉換方法,只列舉作者認為方便易用的方法。
1.char*和wchar_t*的相互轉換
可以利用中間類_bstr_t(頭文件comdef.h)方便的進行相互轉換
const wchar_t* wText = (_bstr_t)"測試"; char* cText = (_bstr_t)L"測試";
可以通過A2T,A2W,T2A,T2W等宏來進行轉換
char* cText = "測試"; USES_CONVERSION; wchar_t wText = A2W(cText);
其中USES_CONVERSION;用來初始化某些局部變量,至於為什么單獨用一個宏來進行變量初始化,http://blog.csdn.net/wuji0447/article/details/4659001中進行了詳細說明。
另外因為這些是宏,所以使用的時候要小心,見http://www.cnblogs.com/rainbowzc/archive/2009/09/07/1562168.html
2.char*轉CString
注意:CString的內部實現與項目屬性頁的Charactor Set配置有關,所以其配置直接影響其與char*或wchar_t*相互轉換的方式。
我們可以直接用char*構造CString來將char*轉為CString。
在Charactor Set配置項not set的情況下,可以直接用char*構造CString或將char*賦值給CString。在Charactor Set配置項為UNICODE的情況下,可以將之轉換為wchar_t*再賦值給CString。
3.CString轉char*
在Charactor Set配置項not set的情況下,可以直接通過GetBuffer函數將CString轉為char*
CString a("測試"); char* cText = a.GetBuffer();
需要注意的是如果我們對cText的內容進行了操作后要想再使用a,則需調用a.ReleaseBuffer()來釋放緩存。
4.wchar_t*和CString的相互轉換
參見2,3
5.char*, wchar_t*轉BSTR
都可利用中間類_bstr_t來轉
char* cText = "測試"; BSTR bstr1 = (_bstr_t)cText; wchar_t* wText = L"測試"; BSTR bstr2 = (_bstr_t)wText;
可使用SysAllocString等函數轉。
BSTR bText1 = ::SysAllocString(L"測試"); BSTR bText2 = ::SysAllocStringLen(L"測試",2); 。。。 // 用完釋放 SysFreeString(bText1); SysFreeString(bText2);
6.BSTR轉char*, wchar_t*
都可利用中間類_bstr_t來轉
7.CString轉BSTR
CString a(L"測試"); BSTR bstr = a.AllocSysString(); SysFreeString(bstr); // 用完釋放
8.BSTR轉CString
BSTR可通過直接構造或賦值給CString來轉換為CString
BSTR bstr = (_bstr_t)cText;
CString a = bstr;