我有一个指向 uint8_t 数组的指针。每 2 个元素实际上是一个 uint_16_t 值,我想使用 reinterpret_cast
:
uint16_t *Dst16Rgb = reinterpret_cast<uint16_t*>(Dst8Rgb);
输出有错误的字节顺序,有没有办法指定 reinterpret_cast
如果我想在小端或大端上进行操作?
谢谢!
最佳答案
I have a pointer to an uint8_t aray. Each 2 elements are actually a uint_16_t
要么你实际上有一个 uint8_t
数组,要么你实际上有一个 uint_16_t
数组。不能两者兼而有之。
uint16_t *Dst16Rgb = reinterpret_cast<uint16_t*>(Dst8Rgb);
通过重新解释指针进行间接操作将具有未定义的行为,因为在指向的地址处没有 uint16_t
对象。
即使您禁用严格别名,仍然存在 UB,除非您保证字节数组对 uint_16_t
充分对齐。
is there a way to specify reinterpret_cast if I want to do it on little or big endian?
没有。数据始终以 native 字节顺序重新解释。如果输入字节具有不同的字节顺序,那么结果将是“错误的”。
您必须知道输入数据的字节顺序。通过移位和屏蔽,您可以在不知道 native 字节序的情况下将字节作为多字节整数读取。
关于c++ - reinterpret_cast 上的字节顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58695483/