windows mobile 中的编码转码

在windows mobile 中,由于系统使用的是Unicode,而在我们使用的API中,有些是要求是ansi编码的,因此,可能你会碰到很多时候都要进行相互转码的问题。幸好,在这方面,MFC 的CString 类已经为我们做了很多工作,当我们要把ansi码的字符转成Unicode,我们只需把ansi的字符值直接赋给CString 就可以了,如:

char *szAnsi="这是一个测试";

CString strUnicode=szAnsi;

而把Unicode转成Ansi,就有些复杂了。我们知道,Unicode一般是双字节编码的,因此,我们把其转成Ansi的时候,其长度是原来长度的二倍,这样才能容得下所有转化过的原来的Unicode字符的值。致于转化,我们可以调用系统的函数:WideCharToMutiByte。其中我写的MFC的转化一例如下:

// //把Unicode编码转成ANSI码
BOOL CFileTestDlg::UtoG(CString m_strUnicode,char *szAnsi, int charlen)
{
 int len;
 len=WideCharToMultiByte(CP_ACP,0,m_strUnicode.GetBuffer(0),m_strUnicode.GetLength(),szAnsi,charlen,NULL,NULL);
 if(len>0)
 {
  szAnsi[len]=NULL;
  return TRUE;
 }
 else
 {
  return FALSE;
 }
}

在这里需注意的,char的长度应为原来长度的双倍,即:

CString strUnicode=_T("这是一个测试");

char *szAnsi=new char[strUnicode.GetLength()*sizeof(WCHAR)];

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值