下面的头文件包含了Ansi与Unicode之间的转换函数,实乃WinCE开发者必备:
#ifndef _ENCODE_H_
#define _ENCODE_H_
//== Ansi to Unicode ==//
static CString Ansi2Unicode(char* ansi)
{
// Calc the length
int len=0;
int widecharlen=MultiByteToWideChar( //计算从Ansi转换到Unicode后需要的字节数
CP_ACP,
MB_COMPOSITE,
ansi, //要转换的Ansi字符串
-1, //自动计算长度
0,
0
);
//
CString tmpstr;
tmpstr.GetBuffer(widecharlen); //为转换后保存Unicode字符串分配内存
MultiByteToWideChar( //从Ansi转换到Unicode字符
CP_ACP,
MB_COMPOSITE,
ansi,
-1,
tmpstr.GetBuffer(widecharlen), //转换到tmpstr
widecharlen //最多转换widecharlen个Unicode字符
);
return tmpstr;
}
//== Unicode to Ansi ==//
static char* Unicode2Ansi(CString unicode,char *ansi)
{
//unsigned char buf[129]; //发送缓冲区
//ZeroMemory(ansi,sizeof(buf)); //缓冲区清零
CString tmpstr(unicode); //复制要发送的字符串
// Calc the length
int multibytelen=WideCharToMultiByte( //计算从Unicode转换到Ansi后需要的字节数
CP_ACP, //根据ANSI code page转换
WC_COMPOSITECHECK | WC_DEFAULTCHAR, //转换出错用缺省字符代替
tmpstr.GetBuffer(unicode.GetLength()), //要转换的字符串地址
unicode.GetLength(), //要转换的个数
0, //转换后字符串放置的地址
0, //最多转换字符的个数,为0表示返回转换Unicode后需要多少个字节
0, //缺省的字符:"/0"
0 //缺省的设置
);
// Convert
WideCharToMultiByte( //转换Unicode到Ansi
CP_ACP,
WC_COMPOSITECHECK | WC_DEFAULTCHAR,
tmpstr.GetBuffer(unicode.GetLength()),
unicode.GetLength(),
ansi, //转换到缓冲区中
128, //最多128个字节
0,
0
);
return ansi;
}
#endif