如何在C++中将字节向量(std::vector<uint8_t>)转换为不同的uint32_t,uint16_t和uint8_t变量

How to cast, in C++, a byte vector (std::vector<uint8_t>) into different uint32_t, uint16_t and uint8_t variables

本文关键字:uint8 转换 uint32 变量 uint16 gt std 向量 vector C++ lt      更新时间:2023-10-16

我有字节向量,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));