Cstring转char*时只能获取第一个字符



你应该是用了UNICODE编码,每个字符都是双字节的,对于英文字符串来说,其UNICODE编码的第2个字节是0,所以你只能获取到第一个字母(因为接着就是0结尾了)。

所以char类型与wchar_t是不能直接强制转换的。具体还跟你程序选择的字符集有关系。解决办法有2种:
1.将你的工程改为本地多字符集就行。如果你是VC,一般在你工程项目属性的常规页面里面就有。
2.是在转换为char之前进行字符集转换。Windows下使用WideCharToMultiByte函数API就行。
如果不想跟底层API打交道,这里告诉你一个在VC中有效的UNICODE与本地多字节转换的诀窍:
那就是使用CStringW与CStringA。在VC的实现下,CString只是对前面两种类的重定义。更为重要的是前面两个类都有一个构造函数接收另外一个类型CString,其内部自动进行了字符集转换。
因此很简单了,转换代码如下:


CString aStr("Hello");
char* szBuf;
szBuf = new char[aStr.GetLength()];
strcpy(szBuf, aStr.GetString());

现在szBuf就可以使用了



一般来说,我们程序内部都会普遍使用UNICODE编码,当我们与一些老系统库接口时不得不面临转换为本地多字节编码的问题(对我们来说一般就是GBK)。CStringA的办法我一直用在我的MFC程序里,简单好用。

以上,仅限于UNICODE与本地多字节编码之间的转换,至于UTF-8之类的就不适用了(当然UTF-8的ASCII码部分是标准的ASCII编码,不会存在LZ的问题,只是中文乱码罢了)
其实,字符编码与字符类型其实还是有很多繁琐的细节的,而且单纯的说某字符串是UNICODE编码也是不严谨的,具体还是去问度娘或GOOGLE,我也是在多年前做我们自己的XML解析器的时候被折磨够呛,才仔细去了解这方面的内容。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值