只是记录一下,以免忘记
#include<iostream>
#include<stdlib.h>
#include<string>
#include<locale.h>
using namespace std;
/**
* 将宽字符串转换成普通字符串
*/
string wstr2str(const wstring& ws){
//获取当前的locale
string curLocale = setlocale(LC_ALL, NULL);
setlocale(LC_ALL, "chs");
const wchar_t* pws = ws.c_str();
int wsLen = ws.length();
int bufLen = sizeof(wchar_t) * wsLen + 1;
char* pRes = new char[bufLen];
memset(pRes, '\0', bufLen);
//wcstombs_s(&convertedChars,dest,dByteNum,wcs,_TRUNCATE)
size_t convertLen = 0;
wcstombs_s(&convertLen, pRes, bufLen, pws, _TRUNCATE);
string resStr = pRes;
delete [] pRes;
//恢复locale
setlocale(LC_ALL, curLocale.c_str());
return resStr;
}
/**
* 将普通字符串转换成宽字符串
*/
wstring str2wstr(const string& str){
//获取当前的locale
string curLocale = setlocale(LC_ALL, NULL);
setlocale(LC_ALL, "chs");
const char* pstr = str.c_str();
int strLen = str.length();
int bufLen = sizeof(char) * strLen + 1;
wchar_t* pRes = new wchar_t[bufLen];
wmemset(pRes, '\0', bufLen);
//mbstowcs_s(&convertedChars,dest,charNum,source,_TRUNCATE);
size_t convertLen = 0;
mbstowcs_s(&convertLen, pRes, bufLen, pstr, _TRUNCATE);
wstring resStr = pRes;
delete[] pRes;
//恢复locale
setlocale(LC_ALL, curLocale.c_str());
return resStr;
}
void test1(){
wstring ws = L"欢迎使用宽字符abc159";
string str = wstr2str(ws);
cout << "转换之后的字符串 = " << str << endl;
}
void test2(){
setlocale(LC_ALL, "chs");//要想输出宽字符,必须设置这个
string s = "欢迎使用宽字符abc159";
wstring wstr = str2wstr(s);
wcout << wstr << endl;
setlocale(LC_ALL, "C");
}
int main(){
test2();
system("pause");
return 0;
}