首页 >后端开发 >C++ >如何在 C 中有效地将 `wstring` 转换为 `string` ?

如何在 C 中有效地将 `wstring` 转换为 `string` ?

Susan Sarandon
Susan Sarandon原创
2024-12-27 05:08:11428浏览

How to Efficiently Convert `wstring` to `string` in C  ?

将 wstring 转换为字符串

问题:
如何在 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn