【问题标题】:C++ convert between Byte vector and wstringC++ 在字节向量和 wstring 之间转换
【发布时间】:2016-03-10 21:25:50
【问题描述】:

我需要在低级别处理存储在宽字符串中的数据。我可以使用以下方法转换为Bytesvector

typedef unsigned char Byte;

wstring mystring = L"my wide string";
Byte const *pointer = reinterpret_cast<Byte const*>(&mystring[0]);
size_t size = mystring.size() * sizeof(mystring.front());
vector<Byte> byteVector(pointer, pointer + size);

但是,我在走另一条路时遇到了麻烦;我对选角不是很熟悉。如何将Bytesvector 转换为wstring

【问题讨论】:

    标签: c++ vector byte bytearray widestring


    【解决方案1】:
    #include <string>
    #include <codecvt>
    
    std::wstring wstring_convert_from_char( const char *str )
    {
        std::wstring_convert<std::codecvt_utf8<wchar_t>, wchar_t> converter;
        return converter.from_bytes( str );
    }
    
    std::string string_convert_from_wchar( const wchar_t *str )
    {
        std::wstring_convert<std::codecvt_utf8<wchar_t>, wchar_t> converter;
        return converter.to_bytes( str );
    }
    
    std::wstring wstring_convert_from_bytes( const std::vector< char > &v )
    {
        std::wstring_convert<std::codecvt_utf8<wchar_t>, wchar_t> converter;
        return converter.from_bytes( v.data(), v.data() + v.size() );
    }
    
    std::vector< char > wstring_convert_to_bytes( const wchar_t *str )
    {
        std::wstring_convert<std::codecvt_utf8<wchar_t>, wchar_t> converter;
        std::string string = converter.to_bytes( str );
        return std::vector< char >( string.begin(), string.end() );
    }
    

    【讨论】:

    • +1 以获得最佳答案。不过有一个问题:我在 Ubuntu 16.04 和 g++ 5.4.0 上使用这些方法 - 不需要用 C++11 和头文件 &lt;locale&gt; 编译吗?谢谢!!
    • @GuyAvraham 好问题,但老实说我不熟悉 Ubuntu。
    【解决方案2】:

    你可以这样做
    mystring.assign(reinterpret_cast&lt;wstring::const_pointer&gt;(&amp;byteVector[0]), byteVector.size() / sizeof(wstring::value_type));

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-29
      • 1970-01-01
      • 1970-01-01
      • 2012-05-24
      • 1970-01-01
      • 2021-04-22
      • 1970-01-01
      相关资源
      最近更新 更多