在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)];