std::string 与std::wstring互转

本文详细介绍了如何在C++中将std::string转换为std::wstring,并反过来进行转换的方法,包括使用MultiByteToWideChar函数实现字符串转宽字符字符串,以及使用wcstombs实现宽字符字符串转普通字符字符串。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//将std::string转成std::wstring
std::wstring DeltaRecorder::MultibyteToWide(const std::string& multibyte)
{
size_t length = multibyte.length();
if (length == 0)
return std::wstring();


wchar_t * wide = new wchar_t[multibyte.length()*2+2];
if (wide == NULL)
return std::wstring();
int ret = MultiByteToWideChar(CP_ACP, 0, multibyte.c_str(), (int)multibyte.size(), wide, (int)length*2 - 1);
wide[ret] = 0;
std::wstring str = wide;
delete[] wide;
return str;

}


//将std::wstring转成std::string
std::string DeltaRecorder::ws2s(const std::wstring& ws)
{
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);
string result = _Dest;
delete []_Dest;
setlocale(LC_ALL, curLocale.c_str());
return result;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值