wstring StringToWString(string s)
{
// 获取缓冲区大小
int len = MultiByteToWideChar(CP_ACP, 0, s.c_str(), s.size(), NULL, 0);
// 申请空间,缓冲区大小按字符计算
TCHAR* buf = new TCHAR[len+1];
// 多字节编码转换成宽字节编码
MultiByteToWideChar(CP_ACP, 0, s.c_str(), s.size(), buf, len);
// 添加字符串结尾
buf[len] = '\0';
wstring ws;
ws.append(buf);
// 删除缓冲区
if(buf) delete[] buf;
return ws;
}
// ============================= 邪恶的分割线 ===========================
string WStringToString(wstring ws)
{
// 获取缓冲区大小
int len = WideCharToMultiByte(CP_ACP, 0, ws.c_str(), ws.size(), NULL, 0, NULL, NULL);
// 申请空间,缓冲区大小按字节计算
char* buf = new char[len+1];
// 宽字节编码转换成多字节编码
WideCharToMultiByte(CP_ACP, 0, ws.c_str(), ws.size(), buf, len, NULL, NULL);
// 添加字符串结尾
buf[len] = '\0';
string s;
s.append(buf);
// 删除缓冲区
if(buf) delete[] buf;
return s;
}
wqyl注:
中英文字符都可以转换
string to LPCWSTR的话,经测试:不能在s2ws函数内直接转为LPCWSTR,然后return LPCWSTR,
否则返回空或者乱码(中英文字符都乱码或空)
需要在函数外面转为LPCWSTR
例如:
string s = "我是好人";
wstring ws = StringToWString(s);
LPCWSTR lpcw = ws.c_str();
这样转换就正常了。