如何获取指向uint32_t的字节的指针

How to get a pointer to the bytes of a uint32_t

本文关键字:字节 指针 uint32 何获 取指      更新时间:2024-09-27

我正在尝试使用uint8_t字节的向量创建一个完整的uint32_t。它应该反复填充。它可以通过以下任何一种方式发生:

  • 1个字节和3个字节
  • 2字节和2字节
  • 4字节
  • 3字节和1字节
uint32_t L = 0;
uint32_t* LPtr = &L;
std::vector<uint8_t> data1 = {0x1f, 0x23};
memcpy(LPtr, data1.data(), 2);
EXPECT_EQ(0x231f, L);

以上工作正常(前两个字节(。但以下不是(使用两组字节(。

uint32_t L = 0;
uint32_t* LPtr = &L;
std::vector<uint8_t> data1 = {0x1f, 0x23};
std::vector<uint8_t> data2 = {0x3a, 0xee};
memcpy(LPtr, data1.data(), 2);
memcpy(LPtr, data2.data(), 2);
EXPECT_EQ(0x231f, L);
EXPECT_EQ(0x231fee3a, L);

我觉得问题是LPtr没有指向下一个应该填充的字节。我尝试了不指向uint32_t的单个字节的LPtr+2

这应该使用memcpy来完成,并且输出应该转到uint32_t。有什么办法解决这个问题吗?

到目前为止,持久性还不是一个问题。一旦uint32_t完成(当最终复制4个字节时(,就可以对其进行校正。

感谢您的帮助!

问题是您使用指向uint32_t的指针,因此递增它不会使它迭代1个字节,只会迭代4个字节。这是一个填充L的所有字节的版本,但它仍然扰乱了endianness:

uint32_t gimmeInteger(std::vector<uint8_t> data1, std::vector<uint8_t> data2)
{
assert((data1.size() == 2));
assert((data2.size() == 2));
uint32_t L = 0;
uint8_t* LPtr = reinterpret_cast<uint8_t*>(&L);
memcpy(LPtr, data1.data(), 2);
memcpy(LPtr+2, data2.data(), 2);
return L;
}