欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

WideCharToMultiByte和MultiByteToWideChar函数的用法(转)

发布时间:2025/1/21 编程问答 28 豆豆
生活随笔 收集整理的这篇文章主要介绍了 WideCharToMultiByte和MultiByteToWideChar函数的用法(转) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

转自:http://www.cnblogs.com/gakusei/articles/1585211.html

为了支持Unicode编码,需要多字节与宽字节之间的相互转换。这两个系统函数在使用时需要指定代码页,在实际应用过程中遇到乱码问题,然后重新阅读《Windows核心编程》,总结出正确的用法。
WideCharToMultiByte的代码页用来标记与新转换的字符串相关的代码页。
MultiByteToWideChar的代码页用来标记与一个多字节字符串相关的代码页。
常用的代码页由CP_ACP和CP_UTF8两个。
使用CP_ACP代码页就实现了ANSI与Unicode之间的转换。
使用CP_UTF8代码页就实现了UTF-8与Unicode之间的转换。
下面是代码实现:
1.  ANSI to Unicode

1 // ANSI to Unicode 2 #include <string> 3 using namespace std; 4 wstring ANSIToUnicode( const string& str ) 5 { 6 int len = 0; 7 len = str.length(); 8 // 返回转换后unicode的长度 9 int unicodeLen = ::MultiByteToWideChar( 10 CP_ACP, // 实现ANSI与Unicode之间的转换 11 0, // 12 str.c_str(), // 转码前的数据 13 -1, 14 NULL, 15 0 ); 16 // 申请内存 17 wchar_t * pUnicode; 18 pUnicode = new wchar_t[unicodeLen+1]; 19 // 初始化申请的内存 20 memset(pUnicode,0,(unicodeLen+1)*sizeof(wchar_t)); 21 ::MultiByteToWideChar( 22 CP_ACP, 23 0, 24 str.c_str(), // 转换前数据 25 -1, 26 (LPWSTR)pUnicode, // 转换后数据 27 unicodeLen ); // 转换长度 28 wstring rt; 29 rt = ( wchar_t* )pUnicode; 30 delete pUnicode; // 删除申请的内存 31 32 return rt; 33 }

 


2.  Unicode to ANSI

// Unicode To ANSI string UnicodeToANSI( const wstring& str ) {char* pElementText;int iTextLen;// wide char to multi chariTextLen = WideCharToMultiByte( CP_ACP,0,str.c_str(),-1,NULL,0,NULL,NULL );pElementText = new char[iTextLen + 1];memset( ( void* )pElementText, 0, sizeof( char ) * ( iTextLen + 1 ) );::WideCharToMultiByte( CP_ACP,0,str.c_str(),-1,pElementText,iTextLen,NULL,NULL );string strText;strText = pElementText;delete[] pElementText;return strText; }

 


3.  UTF-8 to Unicode

//UTF8 To Unicode wstring UTF8ToUnicode( const string& str ) {int len = 0;len = str.length();int unicodeLen = ::MultiByteToWideChar( CP_UTF8,0,str.c_str(),-1,NULL,0 ); wchar_t * pUnicode; pUnicode = new wchar_t[unicodeLen+1]; memset(pUnicode,0,(unicodeLen+1)*sizeof(wchar_t)); ::MultiByteToWideChar( CP_UTF8,0,str.c_str(),-1,(LPWSTR)pUnicode,unicodeLen ); wstring rt; rt = ( wchar_t* )pUnicode;delete pUnicode; return rt; }

 


4.  Unicode to UTF-8    

// Unicode To UTF8 string UnicodeToUTF8( const wstring& str ) {char* pElementText;int iTextLen;// wide char to multi chariTextLen = WideCharToMultiByte( CP_UTF8,0,str.c_str(),-1,NULL,0,NULL,NULL );pElementText = new char[iTextLen + 1];memset( ( void* )pElementText, 0, sizeof( char ) * ( iTextLen + 1 ) );::WideCharToMultiByte( CP_UTF8,0,str.c_str(),-1,pElementText,iTextLen,NULL,NULL );string strText;strText = pElementText;delete[] pElementText;return strText; }

 

总结

以上是生活随笔为你收集整理的WideCharToMultiByte和MultiByteToWideChar函数的用法(转)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。