问题:
如何在 C 中有效地将 wstring 转换为字符串?
上下文:
在 C 中,wstring和 string 分别表示宽字符串和窄字符串。在各种情况下,这两种类型之间的转换可能是必要的。
原始尝试:
#include <string> #include <iostream> int main() { std::wstring ws = L"Hello"; std::string s(ws.begin(), ws.end()); std::cout << "std::string = " << s << std::endl; std::wcout << "std::wstring = " << ws << std::endl; }
问题:
提供的示例只输出初始 wstring 值,而不输出字符串
使用 std::wstring_convert 的解决方案:
C 11 引入了 std::wstring_convert,简化了转换过程:
#include <locale> #include <codecvt> int main() { std::wstring ws = L"Hello"; // Setup converter using convert_type = std::codecvt_utf8<wchar_t>; std::wstring_convert<convert_type, wchar_t> converter; // Convert wstring to string std::string s = converter.to_bytes(ws); std::cout << "std::string = " << s << std::endl; std::wcout << "std::wstring = " << ws << std::endl; }
单线解决方案:
std::wstring str = std::wstring_convert<std::codecvt_utf8<wchar_t>>().from_bytes("some string");
包装函数解决方案:
std::wstring s2ws(const std::string& str) { using convert_typeX = std::codecvt_utf8<wchar_t>; std::wstring_convert<convert_typeX, wchar_t> converterX; return converterX.from_bytes(str); } std::string ws2s(const std::wstring& wstr) { using convert_typeX = std::codecvt_utf8<wchar_t>; std::wstring_convert<convert_typeX, wchar_t> converterX; return converterX.to_bytes(wstr); }
以上是如何在 C 中有效地将 `wstring` 转换为 `string` ?的详细内容。更多信息请关注PHP中文网其他相关文章!