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;


作者:Jingle Guo
出处:http://www.cnblogs.com/studynote/
若标题中有“转载”字样,则本文版权归原作者所有。若无转载字样,本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
 
分类: C++
原文地址:https://www.cnblogs.com/2018shawn/p/9112101.html