Windows API一日一练(80)MultiByteToWideChar函数

<iframe align="center" marginwidth="0" marginheight="0" src="http://www.zealware.com/csdnblog336280.html" frameborder="0" width="336" scrolling="no" height="280"></iframe>
在软件的使用过程中,经常碰到乱码的情况,那么乱码的原因是什么呢?其实很多情况下,就是字符集的不同,也就是说同一个数字代表不同意思。在 Windows 里,目前主要有 ANSI UNICODE 的方式。如果在 UNICODE 的方式里直接显示 ANSI 的字符串是出现乱码的,同样在 ANSI 函数里也不能显示 UNICODE 的字符串,而是要进行相互转换才能显示正确的字符串。在 NT 以后的操作系统里, Windows 底层函数已经全部改为 UNICODE 的方式,如果还是使用 ANSI 的话,要比 UNICODE 函数慢一些,系统底层会从 ANSI 的方式转换为 UNICODE 方式,然后再显示出来。从 ANSI 转换为 UNICODE 的字符串,就可以使用函数 MultiByteToWideChar 来实现。
函数 MultiByteToWideChar 声明如下:
WINBASEAPI
int
WINAPI
MultiByteToWideChar(
__in UINT CodePage,
__in DWORD dwFlags,
__in LPCSTR lpMultiByteStr,
__in int cbMultiByte,
__out_ecount_opt(cchWideChar) LPWSTRlpWideCharStr,
__in int cchWideChar);
CodePage 是代码表。
dwFlags 是转换标志。
lpMultiByteStr 是输入 ANSI 字符串。
cbMultiByte 是输入 ANSI 的字符串长度。
lpWideCharStr 是输出 UNICODE 字符串。
cchWideChar 是输出 UNICODE 字符串的缓冲区大小。
调用函数的例子如下:
#001//
#002// 字符串转换。
#003// 蔡军生 2007/11/28 QQ:9073204 深圳
#004void MultiToWide(void)
#005{
#006 //ANSI 的字符串。
#007 std::string strANSI(" 测试字符串转换 \r\n");
#008
#009 //
#010 const int nBufSize = 512;
#011 TCHAR chBuf[nBufSize];
#012 ZeroMemory(chBuf,nBufSize);
#013
#014 // 转换为 UNICODE 的字符串。
#015 if (MultiByteToWideChar(CP_ACP,0,strANSI.c_str(),strANSI.length(),
#016 chBuf,nBufSize) > 0)
#017 {
#018 //
#019 OutputDebugString(chBuf);
#020 }
#021
#022}



你可能感兴趣的:(C++,c,windows,qq,软件测试)