Unicode与ANSI字符转换
上一篇 /
下一篇 2008-11-18 16:22:32
/ 个人分类:Windows编程相关
windows操作系统本身是基于Unicode编码的,而且API函数也是接受的Unicode-16编码的字符,所以,有时候我们经常在Unicode与其他编码的字符之间进行转换(貌似很多的windows函数都是有两个版本的,像CreateWindowEx(),其中CreateWindowExA()接受的是ANSIN字符串,而CreateWindowExW()接受Unicode字符串)。我们可以用MultiByteToWideChar()和WideCharToMultiByte()在Unicode与其他编码的字符串之间进行转换。
int MultiByteToWideChar(
UINT CodePage, //代码页,具体意思不清楚,不过如果是ANSI的话一般用CP_ACP
DWORD dwFlags, //我们一般不使用这个参数,一般传递0
LPCSTR lpMultiByteStr, //指定要转换的字符串
int cbMultiByte, //指定字符串字节书数,如果为-1,函数便可自动判断源字符串长度
LPWSTR lpWideCharStr, //转换后字符串要写入的缓冲区的地址
int cchWideChar //指定缓冲区大小(字符数),如果为0,则函数不转换,而是返回宽字符数
); //(包括终止字符'\0')。
一般按照以下步骤将一个多字节字符串转换成Unicode形式:
(1)调用MultiByteToWideChar,为lpWideCharStr传入NULL,cchWideChar传入0,为cbMultiByte
传入-1.
(2) 分配一块内存,他的大小是上一个MultiByteToWideChar返回值乘以sizeof(wchar_t)。
(3) 再次调用MultiByteToWideChar,将分配的内存传入lpWideCharStr,cchWideChar为第二步
计算的值。
(4) 使用转换后的字符串。
(5) 释放Unicode字符串占用的内存块。
如果要将Unicode字符串转换为多字节字符串,可以使用WideCharToMultiByte:
int WideCharToMultiByte(
UINT CodePage,
DWORD dwFlags,
LPCWSTR lpWideCharStr,
int cchWideChar,
LPSTR lpMultiByteStr,
int cbMultiByte,
LPCSTR lpDefaultChar,
LPBOOL lpUsedDefaultChar
);
将Unicode转换成多字节字符串的步骤跟上面差不多,只是在第二步时不用做乘法运算。最后两个参数是在字符在CodePage指定的代码页中没有相应的表示的时候,才使用这两个参数。
收藏
举报
TAG:
Windows编程相关