繁体   English   中英

使用 std::vector::reverse_iterator 将 int 序列化为字节向量?

[英]serialize int to vector of bytes using std::vector::reverse_iterator?

下一个功能工作正常:

std::vector<uint8_t> serialize_bytes(uint32_t ui)
{
    return {(uint8_t*)&ui, (uint8_t*)(&ui+1)};
}

但它的结果取决于机器的字节序。

我还需要以相反的顺序序列化字节:

std::vector<uint8_t> serialize_bytes(uint32_t ui)
{
    std::vector<uint8_t>::reverse_iterator 
        begin{(uint8_t*)(&ui+1)-1}
      , end{(uint8_t*)(&ui)-1};  //ERROR: Calling a private constructor
    return {begin, end};
}

我知道多种其他方法来进行序列化。 这个 Q 的兴趣是像第一个片段那样从指针构造 reverse_iterator 。

std::vector<uint8_t>::reverse_iterator只能指向std::vector<uint8_t>元素。

使用std::reverse_iterator<uint8_t *>

std::vector<uint8_t> serialize_bytes(uint32_t ui)
{
    using iter_t = std::reverse_iterator<std::uint8_t *>;
    std::uint8_t *ptr = reinterpret_cast<std::uint8_t *>(&ui);
    return {iter_t(ptr + sizeof ui), iter_t(ptr)};
}

您可以使用std::reverse来帮助您完成任务。

std::vector<uint8_t> serialize_bytes(uint32_t ui)
{
    std::vector<uint8_t> v{(uint8_t*)&ui, (uint8_t*)(&ui+1)};
    std::reverse(v.begin(), v.end());
    return v;
}

我把上面的想法用自己的方式重写了

std::vector<uint8_t> serialize_bytes(uint32_t ui)
{
    std::reverse_iterator<uint8_t*> begin{(uint8_t*)(&ui+1)}, end{(uint8_t*)(&ui)};
    return {begin, end};
}

谢谢@HolyBlackCat

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM