正确使用win api进行char和wchar_t互转,以及sprintf出现的转换问题
[編輯] [转简体] (简体译文)
|
作者:huidong
| 分類:【編程】Win32
[
7 瀏覽
0 評論
2 贊
2 踩
]
概要
char和wchar_t的互转,sprintf或者wsprintf经常转出乱码。此时winapi函数MultiByteToWideChar和WideCharToMultiByte就可以大显身手了
正文
MultiByteToWideChar和WideCharToMultiByte是winapi函数,专门进行char和wchar的转换
用wsprintf
是理想的转换方式,但是经常转换出来的结果是乱码,十分令人费解。
于是我们可以用MultiByteToWideChar
MultiByteToWideChar(char -> wchar_t):
char ch[128] = { 0 }; sprintf(ch,"hello"); //对待转换的char变量赋值 wchar_t wch[128] = { 0 }; // 务必进行初始化 MultiByteToWideChar(CP_ACP, 0, ch, -1, wch, 128/* 数组大小 */);
WideCharToMultiByte(
wchar_t
-> char
):
// 返回接受字符串所需缓冲区的大小,已经包含字符结尾符'\0' int nSize = WideCharToMultiByte(CP_ACP, 0, str_wchar_t, -1, NULL, 0, NULL, NULL); WideCharToMultiByte(CP_ACP, 0, str_wchar_t, -1, str_char, nSize , NULL, NULL);
因为在wchar_t中中英文都只占一位,但在char中需要两位,所以需要使用nSize得到char变量所需的缓冲区大小。
(https://www.cnblogs.com/vranger/p/3792791.html )
以上代码实测通过
然后乱码就不会出现了。