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 )
以上代码实测通过
然后乱码就不会出现了。
使用示例:http://www.huidong.xyz/index.php?mode=2&id=93