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