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"测试",);
。。。
// 用完释放
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之间的转换的更多相关文章
- CString和CStringA之间的转换
使用UNICODE字符集编程时,总是需要使用那些不支持UNICODE的库,例如sqlite3,Lua等必须使用char*类型的.这个时候用CStringA是最好的. 另外CStringA与CStrin ...
- VC中BSTR、Char*、CString和CComBSTR类型的转换
原文:http://blog.csdn.net/wanghaihao_1/article/details/37498689 1.char*转换成CString 若将char*转换成CString,除了 ...
- char类型和int类型之间的转换
在视屏课程第二章里,我们已经学习了一些常用的数据类型转换.然而,有一些时候我们会经常会遇到将char类型转换成int类型,或者需要将int类型转换为char类型的情况. 这里,我们来探讨一下这种不常用 ...
- wchar_t char string wstring 之间的转换
wchar_t char string wstring 之间的转换 转:http://blog.csdn.net/lbd2008/article/details/8333583 在处理中文时有时需要进 ...
- 彻底搞定char/wchar_t/unicode
彻底搞定char/wchar_t!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! (2013-07-17 10:18:28) 转载▼ 从char/wchar_t到TCHAR(1) ...
- C++中数字与字符串之间的转换(转)
http://www.cnblogs.com/luxiaoxun/archive/2012/08/03/2621803.html 1.字符串数字之间的转换 (1)string --> char ...
- BSTR、char*和CString转换
(1) char*转换成CString 若将char*转换成CString,除了直接赋值外,还可使用CString::Format进行.例如: char chArray[] = "This ...
- VC中BSTR、Char和CString类型的转换
1.char*转换成CString 若将char*转换成CString,除了直接赋值外,还可使用CString::format进行.例如: char chArray[] = "This is ...
- Char* ,CString ,WCHAR*之间的转换
关于Char* ,CString ,WCHAR*之间的转换问题 GDI+所有类的接口函数如果要传递字符串作为参数的话,似乎都用UNICODE串,即WCHAR*.我开始也被整得晕头转向,因为窗口编程所用 ...
随机推荐
- datagridview自动增加行高度和显示全部内容
this.dataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCellsExceptHeaders; //自动调动dat ...
- Azure billing 分析(2)
美国中南部的2008R2的A1的VM放了一天,CPU时间涨了13个小时,有点小贵,真的没有操作啊... 提示早上7到9点有一个小高峰. 看来平时没什么访问量时,还是改成A0能省点钱.因为第一天是用A0 ...
- object_id的用法
OBJECT_ID: 返回数据库对象标识号. 语法 OBJECT_ID ( 'object' ) 参数 'object' 要使用的对象.object 的数据类型为 char 或 nchar.如果 ob ...
- tomcat deploy部署项目三种方法
1.将应用文件夹或war文件直接copy到tomcat的webapps目录下,这样tomcat启动的时候会将webapps目录下的文件夹或war文件的内容当成应用部署.这种方式最简单且无须书写任何配置 ...
- Python学习总结17:exec和eval执行求值字符串
有些时候可能会需要动态地创造Python代码,然后将其作为语句执行或作为表达式计算. 1. exec >>>exec "print 'Hello, world!'" ...
- C++之路进阶——codevs3287(货车运输)
3287 货车运输 2013年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description A 国有 n ...
- 经过本人 6 年.net 工作经验证明 .net 工资确实比 Java 低
很久没有逛博客园了,很久没有出来吐槽了.怎么呢?生活压力大,就需要找地方吐槽. 排版不怎么好,文笔不怎么好,可以看出我不是雇佣的写手. 工作到今夏,已经有6个年头了,一直使用着.net技术,但是最近工 ...
- YbRapidSolution.MVC项目首页分页没有起作用
@model YbRapidSolution.Mvc.Models.CmsPagerDataModel <nav> <ul class="pager"> & ...
- Auto push git tag
CALL "C:\Program Files\TortoiseGit\bin\pageant.exe" "d:\CKey.ppk" set GIT_SSH=C: ...
- C语言初学者代码中的常见错误与瑕疵(1)
曾在豆瓣上看到过一个小朋友贴出他自己的代码(http://www.douban.com/group/topic/40293109/),当时随口指点了几句.难得这位小朋友虚心修正.从善如流,不断地改,又 ...