方法有很多。个人喜欢使用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;
}
相关文章
- 不能精确定位“不能将double”转换为std::string*“in assignment”,也可以是yyparse()和yylex()错误。
- c++ string 和wstring 之间的互相转换函数
- 对std::string和std::wstring区别的解释,807个赞同,有例子
- C++中,如何在标准库的std::string和常用库(Qt,VC等)的QString之间进行选择?
- C++中实现从std::string类型到bool型的转换
- C++ std::unordered_map使用std::string和char *作key对比
- 利用C++实现从std::string类型到bool型的转换
- 如何将UTF-8 std :: string转换为UTF-16 std :: wstring?
- C++中Cstring、wstring 和string互相转换总结
- C++ std::string和std::wstring转换方法