zoukankan      html  css  js  c++  java
  • WideCharToMultiByte和MultiByteToWideChar函数的用法

    先看看这篇关于Windows编码的文章:http://blog.csdn.net/shyboy_nwpu/article/details/4431668

      再看看这篇关于两个函数参数和用法的说明:http://www.cnblogs.com/wind-net/archive/2012/10/10/2718340.html

      为了支持Unicode编码,需要多字节与宽字节之间的相互转换。这两个系统函数在使用时需要指定代码页。

      WideCharToMultiByte的代码页用来标记与新转换的字符串相关的代码页。
      MultiByteToWideChar的代码页用来标记与一个多字节字符串相关的代码页。
    常用的代码页由CP_ACP和CP_UTF8两个:
      使用CP_ACP代码页就实现了ANSI与Unicode之间的转换。
      使用CP_UTF8代码页就实现了UTF-8与Unicode之间的转换。
    1. ANSI to Unicode

    复制代码
     1 wstring ANSIToUnicode( const string& str )
     2 {
     3 int len = 0;
     4 len = str.length();
     5 int unicodeLen = ::MultiByteToWideChar( CP_ACP,
     6             0,
     7             str.c_str(),
     8             -1,
     9             NULL,
    10             0 ); 
    11 wchar_t * pUnicode; 
    12 pUnicode = new wchar_t[unicodeLen+1]; 
    13 memset(pUnicode,0,(unicodeLen+1)*sizeof(wchar_t)); 
    14 ::MultiByteToWideChar( CP_ACP,
    15          0,
    16          str.c_str(),
    17          -1,
    18          (LPWSTR)pUnicode,
    19          unicodeLen ); 
    20 wstring rt; 
    21 rt = ( wchar_t* )pUnicode;
    22 delete pUnicode; 
    23 return rt; 
    24 }
    复制代码

    2. Unicode to ANSI

    复制代码
     1 string UnicodeToANSI( const wstring& str )
     2 {
     3 char*     pElementText;
     4 int    iTextLen;
     5 // wide char to multi char
     6 iTextLen = WideCharToMultiByte( CP_ACP,
     7          0,
     8          str.c_str(),
     9          -1,
    10          NULL,
    11         0,
    12          NULL,
    13          NULL );
    14 pElementText = new char[iTextLen + 1];
    15 memset( ( void* )pElementText, 0, sizeof( char ) * ( iTextLen + 1 ) );
    16 ::WideCharToMultiByte( CP_ACP,
    17          0,
    18          str.c_str(),
    19          -1,
    20          pElementText,
    21          iTextLen,
    22          NULL,
    23          NULL );
    24 string strText;
    25 strText = pElementText;
    26 delete[] pElementText;
    27 return strText;
    28 }
    复制代码

    3. UTF-8 to Unicode

    复制代码
     1 wstring UTF8ToUnicode( const string& str )
     2 {
     3 int len = 0;
     4 len = str.length();
     5 int unicodeLen = ::MultiByteToWideChar( CP_UTF8,
     6             0,
     7             str.c_str(),
     8             -1,
     9             NULL,
    10             0 ); 
    11 wchar_t * pUnicode; 
    12 pUnicode = new wchar_t[unicodeLen+1]; 
    13 memset(pUnicode,0,(unicodeLen+1)*sizeof(wchar_t)); 
    14 ::MultiByteToWideChar( CP_UTF8,
    15          0,
    16          str.c_str(),
    17         -1,
    18          (LPWSTR)pUnicode,
    19          unicodeLen ); 
    20 wstring rt; 
    21 rt = ( wchar_t* )pUnicode;
    22 delete pUnicode; 
    23 return rt; 
    24 }
    复制代码

    4. Unicode to UTF-8

    复制代码
     1 string UnicodeToUTF8( const wstring& str )
     2 {
     3 char*     pElementText;
     4 int    iTextLen;
     5 // wide char to multi char
     6 iTextLen = WideCharToMultiByte( CP_UTF8,
     7          0,
     8          str.c_str(),
     9          -1,
    10          NULL,
    11          0,
    12          NULL,
    13          NULL );
    14 pElementText = new char[iTextLen + 1];
    15 memset( ( void* )pElementText, 0, sizeof( char ) * ( iTextLen + 1 ) );
    16 ::WideCharToMultiByte( CP_UTF8,
    17          0,
    18          str.c_str(),
    19          -1,
    20          pElementText,
    21          iTextLen,
    22          NULL,
    23          NULL );
    24 string strText;
    25 strText = pElementText;
    26 delete[] pElementText;
    27 return strText;
    28 
    29 }
     
    示例下载地址: http://download.csdn.net/detail/qq_23992597/9696223
     
    http://blog.csdn.net/qq_23992597/article/details/53385756
  • 相关阅读:
    MYSQL的一些命令
    微信支付细节说明(服务商版本)
    MYSQL的一些概念
    MYSQL内置数据库之information_schema
    Lua5.1 三色标记gc
    LUA计算table大小getn
    游戏排行榜系统设计 -- 有感
    nginx如何跑起来
    C# winform datagridview数据绑定问题
    windows共享路径访问SMB安装
  • 原文地址:https://www.cnblogs.com/findumars/p/6124209.html
Copyright © 2011-2022 走看看