关于string转换为wstring问题
方法一:需要调用windows的api函数进行转换,在vs2017上试验转换成功
#ifdef _MSC_VER #include <Windows.h> #endif // _MSC_VER wstring strToStdWString(const string& str) { wstring wStr; int len = MultiByteToWideChar(CP_ACP, 0, (LPCSTR)str.c_str(), str.size(), NULL, 0); TCHAR* buffer = new TCHAR[len + 1]; MultiByteToWideChar(CP_ACP, 0,(LPCSTR)str.c_str(), str.size(), buffer, len); buffer[len] = '\0'; wStr.append(buffer); return wStr; }
方法二:该方法经过测试输出错误,并不能完成中文字符的转换
1 wstring strToStdWString2(const string& str) 2 { 3 wstring wstr(str.length(), L' '); 4 std::copy(str.begin(), str.end(), wstr.begin()); 5 return wstr; 6 }
方法三:该调用了locale头文件,与平台无关
#include <locale.h> wstring strToStdWString3(const string& s) { std::string curLocale = setlocale(LC_ALL, NULL); setlocale(LC_ALL, "chs"); const char* _Source = s.c_str(); size_t _Dsize = s.size() + 1; wchar_t* _Dest = new wchar_t[_Dsize]; wmemset(_Dest, 0, _Dsize); size_t convertedChars = 0; mbstowcs_s(&convertedChars, _Dest,_Dsize, _Source, _TRUNCATE); std::wstring ws = _Dest; delete[] _Dest; setlocale(LC_ALL, curLocale.c_str()); return ws; }
方法4:采用ATL封装_bstr_t的过渡,在vs2017上测试失败,链接错误,并无移植性
#include <comutil.h> #pragma comment(lib, "comsuppw.lib") wstring strToWString4(const string& str) { _bstr_t t= str.c_str(); wchar_t* pwchar = (wchar_t*)t; wstring ws = pwchar; return ws; }
总结:使用方法一和方法三都能实现string向wstring的转换,方法一调用了windows的api,方法三需要设置loacle