匯東網


正确使用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

MultiByteToWideCharchar -> wchar_t):

char ch[128] = { 0 };
sprintf(ch,"hello");    //对待转换的char变量赋值

wchar_t wch[128] = { 0 };    // 务必进行初始化  
MultiByteToWideChar(CP_ACP, 0, ch, -1, wch, 128/* 数组大小 */);


WideCharToMultiBytewchar_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 

[ 2] [ 2]


 評論區  0 條評論

+ 添加評論