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

der*_*mai 0 c++ byte vector

我有字节向量 std::vector,我想将其信息提取为一些不同长度的整数。

\n\n

例如,我可以有一个 7 字节的向量,我想在开头读取 uint32_t,然后读取 uint16_t,最后读取 uint8_t。我需要一种方法来指定应该从向量的哪个元素开始读取以及应该读取多少字节。

\n\n
std::vector<std::uint8_t>& bytes(7);\nuint32_t a;\nuint16_t b;\nuint8_t c;\n\n// Could be something similar to this? \n// This yields an invalid conversion error: {aka unsigned char}\xe2\x80\x99 to \xe2\x80\x98const void*\xe2\x80\x99\nstd::memcpy(&a, bytes[0], sizeof(uint32_t)); \nstd::memcpy(&a, bytes[4], sizeof(uint16_t));\nstd::memcpy(&a, bytes[6], sizeof(uint8_t));\n
Run Code Online (Sandbox Code Playgroud)\n

Mes*_*kon 5

您可以获取向量中元素的地址来实现您想要的:

std::memcpy(&a, &bytes[0], sizeof(std::uint32_t));
//              ^
//or use .data() instead
std::memcpy(&a, bytes.data() + 0, sizeof(std::uint32_t));    
Run Code Online (Sandbox Code Playgroud)

  • @Evg 演示如何获取指向索引处元素的指针。在示例中,元素位于索引 0 处。 (3认同)