前言

本文并不尝试列举出所有的转换方法,只列举作者认为方便易用的方法。

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"测试",);
。。。
// 用完释放
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;

char*,wchar_t*,CString和BSTR之间的转换的更多相关文章

  1. CString和CStringA之间的转换

    使用UNICODE字符集编程时,总是需要使用那些不支持UNICODE的库,例如sqlite3,Lua等必须使用char*类型的.这个时候用CStringA是最好的. 另外CStringA与CStrin ...

  2. VC中BSTR、Char*、CString和CComBSTR类型的转换

    原文:http://blog.csdn.net/wanghaihao_1/article/details/37498689 1.char*转换成CString 若将char*转换成CString,除了 ...

  3. char类型和int类型之间的转换

    在视屏课程第二章里,我们已经学习了一些常用的数据类型转换.然而,有一些时候我们会经常会遇到将char类型转换成int类型,或者需要将int类型转换为char类型的情况. 这里,我们来探讨一下这种不常用 ...

  4. wchar_t char string wstring 之间的转换

    wchar_t char string wstring 之间的转换 转:http://blog.csdn.net/lbd2008/article/details/8333583 在处理中文时有时需要进 ...

  5. 彻底搞定char/wchar_t/unicode

    彻底搞定char/wchar_t!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! (2013-07-17 10:18:28) 转载▼     从char/wchar_t到TCHAR(1) ...

  6. C++中数字与字符串之间的转换(转)

    http://www.cnblogs.com/luxiaoxun/archive/2012/08/03/2621803.html 1.字符串数字之间的转换 (1)string --> char ...

  7. BSTR、char*和CString转换

    (1) char*转换成CString 若将char*转换成CString,除了直接赋值外,还可使用CString::Format进行.例如: char chArray[] = "This  ...

  8. VC中BSTR、Char和CString类型的转换

    1.char*转换成CString 若将char*转换成CString,除了直接赋值外,还可使用CString::format进行.例如: char chArray[] = "This is ...

  9. Char* ,CString ,WCHAR*之间的转换

    关于Char* ,CString ,WCHAR*之间的转换问题 GDI+所有类的接口函数如果要传递字符串作为参数的话,似乎都用UNICODE串,即WCHAR*.我开始也被整得晕头转向,因为窗口编程所用 ...

随机推荐

  1. php:PHPExcel导出excel表格

    一.动态生成的内容如何能当成文件来下载呢? 方法:1.将Content-Type设置成application/octet-stream就可以了,即[header('Content-Type: appl ...

  2. max-min fairness 最大最小公平算法

    我们经常面临给一组用户划分稀有资源的问题,他们都享有等价的权利来获取资源,但是其中一些用户实际上只需要比其他用户少的资源.那么我们如何来分配资源呢?一种在实际中广泛使用的分享技术称作“最大最小公平分享 ...

  3. 理解JDBC和JNDI

    下面的英文是我找过来的,因为是英文所以不敢翻译出来误导别人,但是它描述的确实恰到好处,比所谓网上的JNDI和JDBC云云的解释要精辟很多,如果遇到不认识的单词,用有道吧~~:) The Java Na ...

  4. 数据库调优过程(二):找到IO不存在问题,而是sqlserver单表写入IO瓶颈

    物理机上测试IO是否为瓶颈: 使用一个死循环insert into测试数据库最大写入速度: use [iTest]; declare @index int; ; begin ; INSERT into ...

  5. Summary: Process & Tread

    refer to http://www.programmerinterview.com/index.php/operating-systems/thread-vs-process/ A process ...

  6. poj 1179 Polygon

    http://poj.org/problem?id=1179 Polygon Time Limit: 1000MS   Memory Limit: 10000K Total Submissions:  ...

  7. SQL封装、多态与重载

    面向对象1.类:众多对象抽象出来的2.对象:类实例化出来的 3.类的定义关键字 class 4.类里面包含成员变量成员属性 成员方法 5.面向对象三大特性(1)封装目的:保护类,让类更加安全.做法:让 ...

  8. 关于gem包下载网站的说明

  9. docker进入容器方法

    更简单的,建议大家下载 .bashrc_docker,并将内容放到 .bashrc 中. $ wget -P ~ https://github.com/yeasy/docker_practice/ra ...

  10. Hashing function

    Hashing function (散列函式) 在网页应用中被广泛采用,从数码签署.错误检测.登入验证.到压缩储存空间,由于它的原理比较复杂,很多人把它跟加密函式混淆,对于如何运用hash funct ...