多字符与宽字符相互之间的转换

// wstring ת string
string ws2s(const wstring &ws)
{
    string curlocale = setlocale(LC_ALL, NULL);
    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;
}

//string ת wstring
wstring s2ws(const string &s)
{
    string curLocale = setlocale(LC_ALL, NULL);
    setlocale(LC_ALL, "chs");
    const char *_Source = s.c_str();
    size_t _Dsize = 2 * s.size() + 1;
    wchar_t *_Dest = new wchar_t[_Dsize];
    memset(_Dest, 0, _Dsize);
    mbstowcs(_Dest, _Source, _Dsize);
    wstring result = _Dest;
    delete[] _Dest;
    setlocale(LC_ALL, curLocale.c_str());
    return result;

}

采取wstring与string来做的主要原因是防止内存泄漏,让wstring与string自己管理自己的内存空间。

你可能感兴趣的:(宽字符,多字符)