欢迎访问 生活随笔!

尊龙游戏旗舰厅官网

当前位置: 尊龙游戏旗舰厅官网 > > 编程问答 >内容正文

编程问答

widechartomultibyte和multibytetowidechar函数的用法(转) -尊龙游戏旗舰厅官网

发布时间:2025/1/21 编程问答 5 豆豆
尊龙游戏旗舰厅官网 收集整理的这篇文章主要介绍了 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函数的用法(转)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得尊龙游戏旗舰厅官网网站内容还不错,欢迎将尊龙游戏旗舰厅官网推荐给好友。

网站地图