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*.我开始也被整得晕头转向,因为窗口编程所用 ...
随机推荐
- PL/SQL Developer连接到Oracle 12c
安装32位的Oracle客户端instantclient-basic-nt-12.1.0.1.0.zip 下载地址:http://www.oracle.com/technetwork/topics/w ...
- java中的类修饰符、成员变量修饰符、方法修饰符。
类修饰符: public(访问控制符),将一个类声明为公共类,他可以被任何对象访问,一个程序的主类必须是公共类. abstract,将一个类声明为抽象类,没有实现的方法,需要子类提供方法实现. fin ...
- C#: 集合
摘自http://www.cnblogs.com/kissdodog/archive/2013/01/29/2882195.html 先来了解下集合的基本信息 1.BCL中集合类型分为泛型集合与非泛型 ...
- mysql 线程池 数据库连接池
当客户端请求的数据量比较大的时候,使用线程池可以节约大量的系统资源,使得更多的CPU时间和内存可以高效地利用起来.而数据库连接池的使用则将大大提高程序运行效率,同时,我们可以通过其自身的管理机制来监视 ...
- 移动widget开发
发现Oracle----php连接有很多bug无法解决,只好转向php--连接mysql数据库,并装载了mysql两个文件,跟客户端NAVICAT_FOR_MYSQL,然后直接建表,用于测试,能够连通 ...
- linux的vim按了ctrl+s之后假死的解决办法
习惯了很多软件的保存的快捷键,经常在vim中按下ctrl+s,然后就发现vim不响应了,之间一直采用kill的方式解决,近来搜了一下,是这样子的: 这时的vim并没有死掉,只是vim不再向终端输出东西 ...
- linux下的网络配置
临时生效的命令: 设置静态ip: ip addr add 192.168.1.2/24 dev eth0 设置网关: ip route add default via 192.168.1.1 启动某个 ...
- 查看linux的出错信息
先执行:dmesg -c > /dev/null 该命令是把之前的一些信息删除,-c选项表示:Clear the ring buffer after first printing its con ...
- 【RoR win32】新建rails项目找不到script/server的解决办法
现象: D:\>rails new work/demo cd work/demo D:\work\demo>ruby script/server 这时显示出错: ruby: No such ...
- asp.net中获得客户端的IP地址
asp.net中获得客户端的IP地址 因为要在项目中取到客户端IP,在网上搜了下相关资料,其中有一篇文章总结的比较详细,这里就把一些我用的上总结一下 方便以后查阅. 通常我们都通过下面的代码获得IP ...