原帖不详,我从这找到的:http://www.cnblogs.com/sunnyjones/archive/2009/02/25/1397757.html
// char*------>wchar*
wchar_t* AnsiToUnicode( const char* szStr ) { int nLen = MultiByteToWideChar( CP_ACP, MB_PRECOMPOSED, szStr, -1, NULL, 0 ); if (nLen == 0) { return NULL; } wchar_t* pResult = new wchar_t[nLen]; MultiByteToWideChar( CP_ACP, MB_PRECOMPOSED, szStr, -1, pResult, nLen ); return pResult; }
//------------------ 将 宽字节wchar_t* 转换 单字节char*--------------// inline char* UnicodeToAnsi( const wchar_t* szStr ) { int nLen = WideCharToMultiByte( CP_ACP, 0, szStr, -1, NULL, 0, NULL, NULL ); if (nLen == 0) { return NULL; } char* pResult = new char[nLen]; WideCharToMultiByte( CP_ACP, 0, szStr, -1, pResult, nLen, NULL, NULL ); return pResult; }
//-----------------------将单字符 string 转换为宽字符 wstring------------------------------ inline void Ascii2WideString( const std::string& szStr, std::wstring& wszStr ) { int nLength = MultiByteToWideChar( CP_ACP, 0, szStr.c_str(), -1, NULL, NULL ); wszStr.resize(nLength); LPWSTR lpwszStr = new wchar_t[nLength]; MultiByteToWideChar( CP_ACP, 0, szStr.c_str(), -1, lpwszStr, nLength ); wszStr = lpwszStr; delete [] lpwszStr; }
//---------------------------------------------------------------------------------- int _tmain(int argc, _TCHAR* argv[]) { char* pChar = "我喜欢char"; wchar_t* pWideChar = L"我讨厌wchar_t"; wchar_t tagWideCharList[100] ; char ch = 'A'; char tagChar[100] = {NULL}; CString cStr; std::string str; // 注:设置语言环境以便输出WideChar setlocale(LC_ALL,"chs"); // 注: char* 转换 wchar_t* // 注: wchar_t 未重载 << ,所以不可使用 cout << 输出 pWideChar = AnsiToUnicode( pChar ); // 注:printf("%ls") 和 wprintf(L"%s") 一致 printf( "%ls\n", pWideChar ); // 注:wchar_t* 转换 wchar_t[] wcscpy ( tagWideCharList, pWideChar ); wprintf( L"%s\n", tagWideCharList ); // 注:wchar_t[] 转换 wchar_t* pWideChar = tagWideCharList; wprintf( L"%s\n", pWideChar ); // 注:char 转换 string str.insert( str.begin(), ch ); cout << str << endl; // 注:wchar_t* 转换 string pWideChar = new wchar_t[str.length()]; swprintf( pWideChar, L"%s", str.c_str()); wprintf( L"%s\n", pWideChar ); // 注:string 转换 char* pChar = const_cast<char*>(str.c_str()); cout << pChar << endl; // 注:char* 转换 string str = std::string(pChar); // 注: cout 的 << 重载了string, 若printf 的话必须 printf("%s", str.c_str()); // 而不可 print( "%s", str ); 因为 str 是个 string 类 cout << str << endl; // 注:string 转换 char[] str = "无聊啊无聊"; strcpy( tagChar, str.c_str() ); printf( "%s\n", tagChar ); // 注:string 转换 CString; cStr = str.c_str(); // 注:CString 转换 string str = string(cStr.GetBuffer(cStr.GetLength())); // 注:char* 转换 CString cStr = pChar; // 注:CString 转换 char* pChar = cStr.GetBuffer( cStr.GetLength() ); // 注:CString 转换 char[] strncpy( tagChar, (LPCTSTR)CString, sizeof(tagChar)); // 注:CString 转换 wchar_t* pWideChar = cStr.AllocSysString(); printf( "%ls\n", pWideChar ); }