char*,wchar_t*,CString和BSTR之間的轉換


 

前言

本文並不嘗試列舉出所有的轉換方法,只列舉作者認為方便易用的方法。

 

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;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM