VS C++开发问题总结

1 篇文章 0 订阅

1、新建的MFC 对话框CString和char*的转换一直失败(vs工程默认配置)

在网上看了很多CString转char*的方法,但是转换一直失败,例如以下几种方式

CString m_IPADDR = "192.168.1.100";
char* ipaddr = (LPSTR)(LPCTSTR)m_IPADDR;
//或者
strcpy(char *,CString);

以上两种编译都是没有问题,但是传参总是只传第一个字符即“1”,头大的很,后面才发现原来是编码格式选择问题。

因为默认新建的vs工程默认工程使用的字符集是“使用Unicode字符集”,选择多字符集就搞定了。

自己理解:MFC中Ctring,默认采用unicode编码,而char采用ansi编码,两种编码中单个字符占的存储大小也是不同的,CString属于所谓的宽字符集,占一个字符占两个字节;char类型属于窄字符集,一个char字符占一个字节,所以它们之间的转换涉及到字节大小的转换。

对于ANSI编码而言,0x00~0x7F之间的字符,依旧是1个字节代表1个字符。这一点是ANSI编码与Unicode编码之间最大也最明显的区别。为使计算机支持更多语言,通常使用 0x80~0xFF 范围的多个字节来表示 1 个字符。

UNICODE是计算机科学领域里的一项业界标准,包括字符集、编码方案等。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。

当然如果坚持用unicode编码也可以用如下方法实现CString和char*的转换:

//实现unicode编码格式下的CString和char*的转换
//#include <afxpriv.h>
CString m_IPADDR= _T("192.168.1.100");
USES_CONVERSION;
char* ipaddr = T2A(m_IPADDR);

顺便一提:“_T”的含义:_T是一个宏,作用是让你的程序支持Unicode编码。因为Windows使用两种字符集ANSI和UNICODE,前者就是通常使用的单字节方式,但这种方式处理像中文这样的双字节字符不方便,容易出现半个汉字的情况。而后者是双字节方式,方便处理双字节字符。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值