- std::string -> std::wstring
wstring stdcxx_s2ws(string s)
{
wstring ws;
#ifdef _MSC_VER
int iLen = ::MultiByteToWideChar(CP_ACP, 0, s.c_str(), -1, NULL, 0);
if(iLen > 0)
{
wchar_t* pwszDst = new wchar_t[iLen];
if(pwszDst)
{
::MultiByteToWideChar(CP_ACP, 0, s.c_str(), -1, pwszDst, iLen);
pwszDst[iLen -1] = 0;
ws= pwszDst;
delete []pwszDst;
}
}
#else
std::string curLocale = setlocale(LC_ALL, NULL); // curLocale = "C";
setlocale(LC_ALL, "chs");
size_t _Dsize = 2 * (wcslen(wstr) + 1);
char *_Dest = new char[_Dsize];
memset(_Dest, 0, _Dsize);
wcstombs(_Dest, wstr, _Dsize);
ws= _Dest;
delete []_Dest;
setlocale(LC_ALL, curLocale.c_str());
#endif
return (ws);
}
- std::wstring -> std::string
string stdcxx_ws2s(wstring wstr)
{
string str;
#ifdef _MSC_VER
int iLen = ::WideCharToMultiByte(CP_ACP, 0, wstr.c_str(), -1, NULL, 0, NULL, NULL);
if(iLen > 0)
{
char* pszDst = new char[iLen];
if(pszDst)
{
::WideCharToMultiByte(CP_ACP, 0, wstr.c_str(), -1, pszDst, iLen, NULL, NULL);
pszDst[iLen -1] = 0;
str= pszDst;
delete [] pszDst;
}
}
#else
std::string curLocale = setlocale(LC_ALL, NULL); // curLocale = "C";
setlocale(LC_ALL, "chs");
size_t _Dsize = 2 * (wcslen(wstr) + 1);
char *_Dest = new char[_Dsize];
memset(_Dest, 0, _Dsize);
wcstombs(_Dest, wstr, _Dsize);
str= _Dest;
delete []_Dest;
setlocale(LC_ALL, curLocale.c_str());
#endif
return (str);
}
wstring stdcxx_s2ws(string s)
{
wstring ws;
#ifdef _MSC_VER
int iLen = ::MultiByteToWideChar(CP_ACP, 0, s.c_str(), -1, NULL, 0);
if(iLen > 0)
{
wchar_t* pwszDst = new wchar_t[iLen];
if(pwszDst)
{
::MultiByteToWideChar(CP_ACP, 0, s.c_str(), -1, pwszDst, iLen);
pwszDst[iLen -1] = 0;
ws= pwszDst;
delete []pwszDst;
}
}
#else
std::string curLocale = setlocale(LC_ALL, NULL); // curLocale = "C";
setlocale(LC_ALL, "chs");
size_t _Dsize = 2 * (wcslen(wstr) + 1);
char *_Dest = new char[_Dsize];
memset(_Dest, 0, _Dsize);
wcstombs(_Dest, wstr, _Dsize);
ws= _Dest;
delete []_Dest;
setlocale(LC_ALL, curLocale.c_str());
#endif
return (ws);
}
string stdcxx_ws2s(wstring wstr)
{
string str;
#ifdef _MSC_VER
int iLen = ::WideCharToMultiByte(CP_ACP, 0, wstr.c_str(), -1, NULL, 0, NULL, NULL);
if(iLen > 0)
{
char* pszDst = new char[iLen];
if(pszDst)
{
::WideCharToMultiByte(CP_ACP, 0, wstr.c_str(), -1, pszDst, iLen, NULL, NULL);
pszDst[iLen -1] = 0;
str= pszDst;
delete [] pszDst;
}
}
#else
std::string curLocale = setlocale(LC_ALL, NULL); // curLocale = "C";
setlocale(LC_ALL, "chs");
size_t _Dsize = 2 * (wcslen(wstr) + 1);
char *_Dest = new char[_Dsize];
memset(_Dest, 0, _Dsize);
wcstombs(_Dest, wstr, _Dsize);
str= _Dest;
delete []_Dest;
setlocale(LC_ALL, curLocale.c_str());
#endif
return (str);
}