如何获取指向uint32_t的字节的指针
How to get a pointer to the bytes of a uint32_t
我正在尝试使用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;
}
相关文章:
- 将字节数组转换为带有字节序问题的指针
- 向指针地址添加 20 个字节偏移量
- 将(N 个字节)无符号字符指针转换为浮点数和双 C++
- 通过浮点指针操作字节向量
- 复制后删除原始数组指针将前 3 个字节设置为 0
- 将uint64_t转换为字节时从不同大小的整数强制转换为指针
- C++向指针地址添加 4 个字节
- 将constexpr字节数组与缓冲区的一部分(指向数据的指针)进行比较
- 从字节指针读取位的差异
- 读取字节后丢失指针
- C++如何从文件中读取十六进制字节并将其存储为指针
- 以C++(Arduino)为单位比较指针到字节
- 2 个指针,0 字节相差但不相等
- Valgrind:将一个指针分配给另一个指针后丢失字节
- ::运算符 delete(指针) 返回释放的字节大小
- _declSpec(Align(16))不将指针与16个字节对齐
- i2c中的字节指针数组
- 如何在 JNA 中获取字节数组作为从 C 字节指针返回的返回
- reinterpret_cast<字符*>(p)或static_cast<字符*>((void*)p))表示字节指针差,哪个更好?
- c++到c#:有3个元素的字节指针数组等于什么?