关于字符串

在EVC + WINCE平台,用CFile类的成员函数Write往.txt文件中写入数字或者字母都没有问题,而如果写入汉字,则.txt文件在Windows系统中用记事本程序打开,数字与字幕显示正确,而汉字则显示为乱码。

对于上述现象,后来改用标准的C运行库函数fopen、fwrite等进行文件操作就解决了,但是个中缘由不深了了。

 

现在结合网上的一些资料,对字符串的操作进行一个简要的总结,不当之处还望批评指正。

 

首先,说说GetLength和sizeof的区别:
在VC中,  CString str = "asd你好";  str.GetLength() = 7
而sizeof("asd你好") = 8;

在EVC中,CString str = _T("asd你好"); str.GetLength() = 5
而 sizeof(_T("asd你好")) = 12;

 

两种环境,GetLength函数为何得到了不同的两种结果,VC的msdn中有对GetLength函数的如下说明,而EVC却没有:
For multibyte character sets (MBCS), GetLength counts each 8-bit character; that is, a lead and trail byte in one multibyte character are counted as two bytes.

 

然后,转载网上的一些资料:


在VC + Windows中,操作字符串很方便,因为WINDOWS的字处理能力实在是很强大,它支持多种字符集。我们随便使用一个CString str=“你好”,就可以输入我们想要的中文字符串。
在EVC + WINCE中,情况有所改变,因为WINCE的字处理能力不够强大,它在处理字符时,统一将它示为 UNICODE编码,所以我们在EVC中处理中文字符串时需要用到UNICODE编码。下面结合WINDOWS 下VC字符串的处理,对比一下EVC中文字符串的片理方法。
  一、中文字符串定义
  1、在VC中我们如果定义一个中文字符串,可以使用CString str=“你好”或LPCTSTR str=“你好”。
  2、在EVC中我们如果想定义一个中文字符串,可以使用如下方法:CString str=_T(“你好”)或者LPCTSTR str=“你好”,这里LPCTSTR在EVC里就是表示UNICODE字符串。值得注意的是_T()宏中,括号中只能填写常量,不能填定变量。
  二、字符串操作
  1、在VC中我们想拷贝字符串,可以作如下操作:
   char s[20];
   CString str=“你好”;
   strcpy(s,str);
   在EVC中则不能这样做,首先定义中文数组应该用双字节指针wchar_t,而拷贝函数也不能用strcpy,而应该用:wchar_t * wcscpy(wchar_t * wDest,wchar_t wSource);函数,操作如下:
   wchar_t s[20];
   CString str=“你好”;
   wcscpy(s,(LPCTSTR)str); //前面没有转成UNICODE编码,所以这里需要强制转换
  2、在VC中我们想在一个字符串中查找某个子串,只需要作下面的操作:
   CString str=“你是一个好学生”;
   str.Find(“学生”);
   在EVC中不能这样做,因为中文字符串为UNICODE编码,我们必需在查找函数的参数里作如下修改:
   str.Find(_T(“学生”));
  以上是我在用EVC写应用程序时操作中文字符串的一些积累,以文记之,以备不时之需。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值