[英]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.