![](/img/trans.png)
[英]C++ Best Practice: function to accept uint8_t, uint16_t, uint32_t, float
[英]How to cast, in C++, a byte vector (std::vector<uint8_t>) into different uint32_t, uint16_t and uint8_t variables
我有字节向量,std::vector,我想将它的信息提取为一些不同长度的整数。
例如,我可以有一个 7 字节的向量,我想在开头读取一个 uint32_t,然后是一个 uint16_t,最后是一个 uint8_t。 我需要一种方法来指定应该从向量的哪个元素开始读取以及应该读取多少字节。
std::vector<std::uint8_t>& bytes(7);
uint32_t a;
uint16_t b;
uint8_t c;
// Could be something similar to this?
// This yields an invalid conversion error: {aka unsigned char}’ to ‘const void*’
std::memcpy(&a, bytes[0], sizeof(uint32_t));
std::memcpy(&a, bytes[4], sizeof(uint16_t));
std::memcpy(&a, bytes[6], sizeof(uint8_t));
你可以取向量中元素的地址来实现你想要的:
std::memcpy(&a, &bytes[0], sizeof(std::uint32_t));
// ^
//or use .data() instead
std::memcpy(&a, bytes.data() + 0, sizeof(std::uint32_t));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.