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
  • 相关阅读:
    iOS中Zbar二维码扫描的使用
    SOJ 1135. 飞跃原野
    SOJ 1048.Inverso
    SOJ 1219. 新红黑树
    SOJ 1171. The Game of Efil
    SOJ 1180. Pasting Strings
    1215. 脱离地牢
    1317. Sudoku
    SOJ 1119. Factstone Benchmark
    soj 1099. Packing Passengers
  • 原文地址:https://www.cnblogs.com/findumars/p/6124209.html
Copyright © 2011-2022 走看看