C++ std::string和std::wstring转换方法

时间:2021-05-09 20:19:01

方法有很多。个人喜欢使用CRT库的mbstowcs()函数和wcstombs()函数,与平台无关,但需设定locale。
#include <string>
#include <locale.h>
using namespace std;
string ws2s(const wstring& ws)
{
string curLocale = setlocale(LC_ALL, NULL); // curLocale = "C";

setlocale(LC_ALL, "chs");

const wchar_t* _Source = ws.c_str();
size_t _Dsize = 2 * ws.size() + 1;
char *_Dest = new char[_Dsize];
memset(_Dest,0,_Dsize);
wcstombs(_Dest,_Source,_Dsize);
string result = _Dest;
delete []_Dest;

setlocale(LC_ALL, curLocale.c_str());

return result;
}

wstring s2ws(const string& s)
{
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);
mbstowcs(_Dest,_Source,_Dsize);
wstring result = _Dest;
delete []_Dest;

setlocale(LC_ALL, "C");

return result;
}