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;
}
在 C++ 中,你可以使用 `std::wstring_convert` 或者 `std::wstringstream` 来实现 `std::string` 和 `std::wstring` 之间的互相转换。以下是两种方法的示例代码: **方法一:使用 std::wstring_convert** ```cpp #include <iostream> #include <locale> #include <codecvt> std::wstring StringToWString(const std::string& str) { std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter; return converter.from_bytes(str); } std::string WStringToString(const std::wstring& wstr) { std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter; return converter.to_bytes(wstr); } int main() { std::string utf8Str = "Hello, 世界!"; std::wstring wideStr = StringToWString(utf8Str); std::cout << "Wide string: " << wideStr << std::endl; std::wstring wideStr2 = L"你好,世界!"; std::string utf8Str2 = WStringToString(wideStr2); std::cout << "UTF-8 string: " << utf8Str2 << std::endl; return 0; } ``` **方法二:使用 std::wstringstream** ```cpp #include <iostream> #include <sstream> std::wstring StringToWString(const std::string& str) { std::wstringstream wss; wss << str.c_str(); return wss.str(); } std::string WStringToString(const std::wstring& wstr) { std::stringstream ss; ss << wstr.c_str(); return ss.str(); } int main() { std::string utf8Str = "Hello, 世界!"; std::wstring wideStr = StringToWString(utf8Str); std::cout << "Wide string: " << wideStr << std::endl; std::wstring wideStr2 = L"你好,世界!"; std::string utf8Str2 = WStringToString(wideStr2); std::cout << "UTF-8 string: " << utf8Str2 << std::endl; return 0; } ``` 无论使用哪种方法,`StringToWString` 函数将 `std::string` 转换为 `std::wstring`,`WStringToString` 函数将 `std::wstring` 转换为 `std::string`。你可以根据需要选择适合的方法进行转换。 请注意,在使用 `std::wstring` 和 `std::string` 进行转换时,确保你的编译环境支持 Unicode 字符集,并且设置了正确的字符集编码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值