![](/img/trans.png)
[英]How to compute distance between std::vector<int>::iterator and std::vector<int>::reverse_iterator?
[英]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.