方式一:调用Windows API
-
#include <Windows.h>
-
//将string转换成wstring
-
wstring string2wstring(string str)
-
{
-
wstring result;
-
//获取缓冲区大小,并申请空间,缓冲区大小按字符计算
-
int len = MultiByteToWideChar(CP_ACP,
0, str.c_str(), str.size(),
NULL,
0);
-
TCHAR* buffer =
new TCHAR[len +
1];
-
//多字节编码转换成宽字节编码
-
MultiByteToWideChar(CP_ACP,
0, str.c_str(), str.size(), buffer, len);
-
buffer[len] =
'\0';
//添加字符串结尾
-
//删除缓冲区并返回值
-
result.append(buffer);
-
delete[] buffer;
-
return result;
-
}
-
-
//将wstring转换成string
-
string wstring2string(wstring wstr)
-
{
-
string result;
-
//获取缓冲区大小,并申请空间,缓冲区大小事按字节计算的
-
int len = WideCharToMultiByte(CP_ACP,
0, wstr.c_str(), wstr.size(),
NULL,
0,
NULL,
NULL);
-
char* buffer =
new
char[len +
1];
-
//宽字节编码转换成多字节编码
-
WideCharToMultiByte(CP_ACP,
0, wstr.c_str(), wstr.size(), buffer, len,
NULL,
NULL);
-
buffer[len] =
'\0';
-
//删除缓冲区并返回值
-
result.append(buffer);
-
delete[] buffer;
-
return result;
-
}
方式二:采用ATL封装_bstr_t的过渡
-
#include <comutil.h>
-
#pragma comment(lib, "comsuppw.lib")
-
-
string ws2s(const wstring& ws)
-
{
-
_bstr_t t = ws.c_str();
-
char* pchar = (
char*)t;
-
string result = pchar;
-
return result;
-
}
-
-
wstring s2ws(const string& s)
-
{
-
_bstr_t t = s.c_str();
-
wchar_t* pwchar = (
wchar_t*)t;
-
wstring result = pwchar;
-
return result;
-
}