方式一:調用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;
}
以上轉載自
https://blog.csdn.net/liminwang0311/article/details/79975174
另外C++ 11 好像還支持一下這種
// string_cvt.cpp : 此文件包含 "main" 函數。程序執行將在此處開始并結束。
//#include "pch.h"
#include <iostream>
#include <string>
#include <codecvt>using namespace std;
int main()
{wstring str = L"中國人";wstring_convert<codecvt<wchar_t, char, mbstate_t>> converter(new codecvt<wchar_t, char, mbstate_t>("CHS"));string narrowStr = converter.to_bytes(str);wstring wstr = converter.from_bytes(narrowStr);cout << narrowStr << endl;wcout.imbue(locale("chs"));wcout << wstr << endl;
}
以上轉載自
https://blog.csdn.net/zang141588761/article/details/85600249