您的位置:首页 > 其它

wchar、char、CString、string

2012-12-06 15:27 232 查看
CString(wchar) 转char*---------------
char *p;
DWORD dwNum =   WideCharToMultiByte(CP_OEMCP,NULL,Path.GetBuffer(),-1,NULL,0,NULL,FALSE);
p   = new   char[dwNum];
ZeroMemory(p,dwNum);
if(!p)
{
delete   []p;
}
WideCharToMultiByte   (CP_OEMCP,NULL,Path.GetBuffer(),-1,p,dwNum,NULL,FALSE);
为了支持Unicode编码,需要多字节与宽字节之间的相互转换。这两个系统函数在使用时需要指定代码页,在实际应用过程中遇到乱码问题,然后重新阅读《Windows核心编程》,总结出正确的用法。WideCharToMultiByte的代码页用来标记与新转换的字符串相关的代码页。MultiByteToWideChar的代码页用来标记与一个多字节字符串相关的代码页。常用的代码页由CP_ACP和CP_UTF8两个。使用CP_ACP代码页就实现了ANSI与Unicode之间的转换。使用CP_UTF8代码页就实现了UTF-8与Unicode之间的转换。下面是代码实现:1.    ANSI to Unicodewstring 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 ANSIstring   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   Unicodewstring 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-8string 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;}

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐