MultiByteToWideChar函数

在软件的使用过程中,经常碰到乱码的情况,那么乱码的原因是什么呢?其实很多情况下,就是字符集的不同,也就是说同一个数字代表不同意思。在 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) LPWSTR lpWideCharStr,
    __in int      cchWideChar);
CodePage 是代码表。
dwFlags 是转换标志。
lpMultiByteStr 是输入 ANSI 字符串。
cbMultiByte 是输入 ANSI 的字符串长度。
lpWideCharStr 是输出 UNICODE 字符串。
cchWideChar 是输出 UNICODE 字符串的缓冲区大小。
 
调用函数的例子如下:
#001 //
#002  // 字符串转换。
#003  //
#004  void 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  }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值