簡體   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