关于vs下复杂的字符处理

从vc6.0转到vs2005及以上的同学,一定为vs2005复杂的字符处理,苦恼不已。

vs2005下有 TCHAR,      LPCSTR,CString 等等概念

 

 一 如何通过编译

最简单的方法是什么,就是在MFC程序中,使用MFC的CString ,另外在所有的字符常量加上_T宏

CString 可以直接转成LPCSTR,

如CString str = _T("hello"); 

 LPCSTR s = str;

基本上,有了CString ,和_T 宏你写MFC的程序,在编译这关就不会有什么问题了。

 

好的,如果想知道原理,继续往下看,如果只是要解决问题,可以略过下面的内容。

  二 原理

       2.1 

         因为C++支持两种字符串,即常规的ANSI编码(使用""包裹)和Unicode编码(使用L""包裹),这样对应的就有了两套字符串字符串处理函数,比如:strlen和wcslen,分别用于处理两种字符串

 微软将这两套字符集及其操作进行了统一,通过条件编译(通过_UNICODE和UNICODE宏)控制实际使用的字符集,这样就有了_T("")这样的字符串,对应的就有了_tcslen这样的函数
  为了存储这样的通用字符,就有了TCHAR:
  当没有定义_UNICODE宏时,TCHAR = char,_tcslen = strlen

  当定义了_UNICODE宏时,TCHAR = wchar_t , _tcslen = wcslen

        于是万能的_T来了,_T("hello");

     如果你编译一个程序为ANSI方式, _T实际不起任何作用。  而如果编译一个程序为UNICODE方式,则编译器会把"Hello"字符串以UNICODE方式保存.

       一句话,如果你怕麻烦 ,直接使用_T()就行,它会帮你搞定一切,自动选择使用char还是wchar_t.

     所以在编写VS程序的时候,请自觉在所有的字符常量前面,加上一个_T,不加白不加啊。

   

    2.2

    CString和LPCSTR是可以相互直接赋值 的(想必是重载了“=”)。

       CString str;
       str.Format(_T("x=%d,y=%d"),1,2);
       LPCTSTR s= _T("DDDD");
       str = s;
      AfxMessageBox(str);

 

以上所有程序,测试环境为vs2005

 参考资料:

http://www.cnblogs.com/sunnyjones/archive/2009/02/24/1397538.html

http://baike.baidu.com/view/2624257.htm

http://baike.baidu.com/view/2901835.htm

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值