MFC中,Unicode和多字节字符集下 CString和char的转化

转载地址:http://blog.sina.com.cn/s/blog_5ebddaf8010155w4.html

博主在MFC初期是遇到了一个初学MFC的人很多都会遇到的一个基本问题:就是Unicode或多字节字符集下CString和Char的转化问题。其实这种问题解决的方式很简单,两种基本形式记住即可:

1.unicode下,转换字符串形式为_T("HelloWorld");

2.MBCS下,转换字符串的形式为"HelloWorld"

 

 

多字节字符集 (MBCS) 是一种替代 Unicode 以支持无法用单字节表示的字符集(如日文和中文)的方法。为国际市场编程时应考虑使用 Unicode 或 MBCS,或使程序能够通过更改开关来生成支持两种字符集之一的程序。

最常见的 MBCS 实现是双字节字符集 (DBCS)。一般来说,Visual C++(尤其是 MFC)完全支持 DBCS。

有关示例,请参见 MFC 源代码文件。

对于语言使用大字符集的市场所使用的平台,代替 Unicode 的最佳方法是 MBCS。MFC 通过使用可国际化的数据类型和 C 运行时函数来支持 MBCS。您也应在自己的代码中这样操作。

在 MBCS 下,字符被编码为单字节或双字节。在双字节字符中,第一个字节(即前导字节)表示它和下一个字节将被解释为一个字符。第一个字节来自留作前导字节的代码范围。哪个范围的字节可以用作前导字节取决于所使用的代码页。例如,日文代码页 932 使用 0x81 到 0x9F 范围内的字节作为前导字节,而朝鲜语代码页 949 则使用其他范围的字节。

 

 

MFC中,Unicode和多字节字符集下 CString和char的转化

unicode下

得到CString的长度
CString strtest=_T("caoeeks");
wcslen(strtest);
wcslen(_T("123"));

多字节字符集下
strlen(CString str);

CString转TCHAR
CString str = "aklsdjf ";
TCHAR* tch = (LPTSTR)(LPCTSTR)str;

lstrcpy(data, abc);
sprintf(data, "%s ", (LPCTSTR) abc);
sprintf(data, abc);


char* 和 cstring的转换

char * charP;
CString strP;
(1)char* -> cstring
strP = CString(charP)

(2)cstring -> char*
WideCharToMultiByte(CP_OEMCP,0,(LPCTSTR)strP,-1,charP,260,0,false);

CString和 int的转换
CString strNum=...
int value = _ttoi(static_cast<LPCTSTR>(strNum));
或者
int value = _ttoi(strNum);

多字节字符集下

Cstring转化为char

转化成数组:

Cstring str=”convert”;

char char_str [512];

strncpy_s(char_str,(LPCTSTR)str_sum,sizeof(char_str));

转化成char指针:

char * ch_a =(char*)str.GetBuffer(str.GetLength());

char转化为Cstring

Cstring str;

char szBuff[2048];

str.Format("%s",szBuff);

CString 转 int :

n=atoi(str);


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值