Wince 字符转换(WideCharToMultiByte和MultiByteToWideChar)方法
2013-06-12 23:38
483 查看
Wince开发的时候经常需要做编码转换,特别是做串口通信的时候,ASNI和宽字符编码转换经常做。下面是常用的转换方法,个人开发经验来说[b]ASNI和宽字符编码的转换是最常用的。[/b]
[b]做串口通信的时候还经常需要看16进制的编码来确定是什么字符编码。所以对ASNI和宽字符编码规则也要有一定了解,这方面后面再专门写一个帖子来说明。现在先来说明常用的字符转换方法:[/b]
WideCharToMultiByte的代码页用来标记与新转换的字符串相关的代码页。
MultiByteToWideChar的代码页用来标记与一个多字节字符串相关的代码页。
常用的代码页由CP_ACP和CP_UTF8两个。
使用CP_ACP代码页就实现了ANSI与Unicode之间的转换。
使用CP_UTF8代码页就实现了UTF-8与Unicode之间的转换。
下面是代码实现:
[b]做串口通信的时候还经常需要看16进制的编码来确定是什么字符编码。所以对ASNI和宽字符编码规则也要有一定了解,这方面后面再专门写一个帖子来说明。现在先来说明常用的字符转换方法:[/b]
WideCharToMultiByte的代码页用来标记与新转换的字符串相关的代码页。
MultiByteToWideChar的代码页用来标记与一个多字节字符串相关的代码页。
常用的代码页由CP_ACP和CP_UTF8两个。
使用CP_ACP代码页就实现了ANSI与Unicode之间的转换。
使用CP_UTF8代码页就实现了UTF-8与Unicode之间的转换。
下面是代码实现:
1. ANSI to Unicode wstring ANSIToUnicode( const string& str ) { int len = 0; len = str.length(); int unicodeLen = ::MultiByteToWideChar( CP_ACP, 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_ACP, 0, str.c_str(), -1, (LPWSTR)pUnicode, unicodeLen ); wstring rt; rt = ( wchar_t* )pUnicode; delete pUnicode; return rt; }
2. Unicode to ANSI string UnicodeToANSI( const wstring& str ) { char* pElementText; int iTextLen; // wide char to multi char iTextLen = 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 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 string UnicodeToUTF8( const wstring& str ) { char* pElementText; int iTextLen; // wide char to multi char iTextLen = 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; }
相关文章推荐
- MultiByteToWideChar和WideCharToMultiByte的正确使用方法及参数详解,实现字符编码转换、宽字符和字符的转换
- 用MultiByteToWideChar和WideCharToMultiByte进行短字符和宽字符之间的转换
- ANIS与UNICODE字符格式转换:MultiByteToWideChar()和WideCharToMultiByte()函数介绍
- ANIS与UNICODE字符格式转换:MultiByteToWideChar() 和WideCharToMultiByte() 函数
- Windows,C/C++_字符串转换_MultiByteToWideChar和WideCharToMultiByte的正确使用方法及参数详解
- 用MultiByteToWideChar和WideCharToMultiByte进行短字符和宽字符之间的转换
- 关于MultiByteToWideChar与WideCharToMultiByte代码测试(宽字符与多字节字符的转换)以及字符串的转换代码测试
- <Win32 API> 多字节字符与宽字符 WideCharToMultiByte/MultiByteToWideChar
- MultiByteToWideChar和WideCharToMultiByte用法详解, ANSI和UNICODE之间的转换
- UNICODE和ANSI字符串的转换(解释了MultiByteToWideChar,WideCharToMultiByte,GetTextCharsetInfo,GetTextCharset,IsDBCSLeadByte,IsDBCSLeadByteEx,IsTextUnicode一共7个函数)
- Windows中的字符转换(Multibyte to Widechar&&Widechar to Multibyte)
- COM初接触及字符转换WideCharToMultiByte
- wchar*与char *相互转换 [MultiByteToWideChar、WideCharToMultiByte函数用法]
- MultiByteToWideChar和WideCharToMultiByte的正确使用方法及参数详解
- wchar*与char *相互转换 [MultiByteToWideChar、WideCharToMultiByte函数用法]
- MultiByteToWideChar和WideCharToMultiByte使用方法详解
- 关于MultiByteToWideChar及WideCharToMultiByte使用方法
- Linux 多字节与宽字符的相互转化(类似MultiByteToWideChar和WideCharToMultiByte)
- 多字节转换MultiByteToWideChar和WideCharToMultiByte使用小结
- MultiByteToWideChar和WideCharToMultiByte的正确使用方法及参数详解