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;}
相关文章推荐
- wchar_t*,wchar_t,wchat_t数组,char,char*,char数组,std::string,std::wstring,CString转自由骑士大哥
- CString、LPCTSTR、LPTSTR、TCHAR、WCHAR、string、wchar_t、char解析
- CString、LPCTSTR、LPTSTR、TCHAR、WCHAR、string、wchar_t、char
- wchar_t,char,string,CString,BSTR,CComBSTR,_bstr_t,VARIANT 、_variant_t 与 COleVariant相互转换
- wchar_t*,wchar_t,wchat_t数组,char,char*,char数组,std::string,std::wstring,CString 以及system("command")
- CString、LPCTSTR、LPTSTR、TCHAR、WCHAR、string、wchar_t、char解析
- 总是忘了 记下来吧 char wchar string cstring wstring 之间的转换
- CString/String/int/wchar/char类型相转(转)
- 转:VC之CString,wchar_t,int,string,char*之间的转换---学习总结
- std::string,std::wstring,CString,char,char*,char数组,wchar_t*,wchar_t,wchat_t数组
- CString与string,wchar与char,wstring与string的相关转换问题
- wchar_t*,wchar_t,wchat_t数组,char,char*,char数组,std::string,std::wstring,CString
- VC之CString,wchar_t,int,string,char*之间的转换
- VC之CString,wchar_t,int,string,char*之间的转换
- wchar_t*,wchar_t,wchat_t数组,char,char*,char数组,std::string,std::wstring,CString....转换
- String,Cstring和char*的区别和转换和char,wchar_t,TCHAR的区别
- {wchar_t*, wchar_t, wchat_t数组},{char,char*,char数组},{std::string,std::wstring},CString之间的相互转换
- VC之CString,wchar_t,int,string,char*之间的转换
- wchar_t*,wchar_t,wchat_t数组,char,char*,char数组,std::string,std::wstring,CString....
- VC之CString,wchar_t,int,string,char*之间的转换