string,wstring互轉

總結一:

std::string ws2s(const std::wstring& ws)
{
	std::string curLocale = setlocale(LC_ALL, NULL);        // curLocale = "C";
	setlocale(LC_ALL, "chs");
	const wchar_t* _Source = ws.c_str();
	size_t _Dsize = 2 * ws.size() + 1;
	char *_Dest = new char[_Dsize];
	memset(_Dest,0,_Dsize);
	wcstombs(_Dest,_Source,_Dsize);
	std::string result = _Dest;
	delete []_Dest;
	setlocale(LC_ALL, curLocale.c_str());
	return result;
}

std::wstring s2ws(const std::string& s)
{
	setlocale(LC_ALL, "chs"); 
	const char* _Source = s.c_str();
	size_t _Dsize = s.size() + 1;
	wchar_t *_Dest = new wchar_t[_Dsize];
	wmemset(_Dest, 0, _Dsize);
	mbstowcs(_Dest,_Source,_Dsize);
	std::wstring result = _Dest;
	delete []_Dest;
	setlocale(LC_ALL, "C");
	return result;
}

總結二:(推薦)

#include "stdafx.h"
#include<string>

#ifndef STRING2WSTRING_H
#define STRING2WSTRING_H

using namespace std;
wstring string2wstring(string str);
string wstring2string(wstring wstr);

//將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;
}

#endif // STRING2WSTRING_H


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章