网上这种转换非常多,但基本遇见中文时没有不乱码的,今天做一个简单的总结
wstring转string
void funWstrToStr(wstring strw,string& str,UINT CODEPAGE)
{
int num = strw.length();
int len = WideCharToMultiByte(CODEPAGE, 0, (LPCWSTR)strw.c_str(), num, NULL, 0, NULL, NULL);
char* szStr = new char[len+1];
WideCharToMultiByte(CODEPAGE, 0, (LPCWSTR)strw.c_str(), num, szStr, len, NULL, NULL);
szStr[len] = '\0';
str = szStr;
}
string 转wstring
void funStrToWstr(string str,wstring& strw,UINT CODEPAGE)
{
char* pData= str.c_str();
DWORD dwNum = MultiByteToWideChar(CodePage, 0, pData, -1, NULL, 0);
if (dwNum == 0)
{
return;
}
WCHAR* pwText = new WCHAR[dwNum];
memset(pwText, '\0', dwNum);
MultiByteToWideChar(CodePage, 0, pData, -1, pwText, dwNum);
strw = pwText;
}
声明:这里的方法只适用于windows;linux下另有一套转换函数,有兴趣的可以查查