1

我有一个指向 uint8_t 数组的指针。每 2 个元素实际上是一个 uint_16_t 值,我想使用reinterpret_cast

uint16_t *Dst16Rgb = reinterpret_cast<uint16_t*>(Dst8Rgb);

输出有错误的字节序,有没有办法指定reinterpret_cast我想在小字节序还是大字节序上执行它?

谢谢!

4

1 回答 1

2

我有一个指向 uint8_t 数组的指针。每 2 个元素实际上是一个 uint_16_t

要么你实际上有一个数组uint8_t,要么你实际上有一个数组uint_16_t。不能两者兼而有之。

uint16_t *Dst16Rgb = reinterpret_cast<uint16_t*>(Dst8Rgb);

uint16_t通过重新解释指针间接将具有未定义的行为,因为在指向的地址处没有对象。

即使您禁用严格别名,仍然存在 UB,除非您保证字节数组对于uint_16_t.

如果我想在小端或大端上进行,有没有办法指定 reinterpret_cast ?

不会。数据总是以原生字节序重新解释。如果输入字节具有不同的字节序,那么结果将是“错误的”。

您必须知道输入数据的字节顺序。您可以通过移位和屏蔽将字节读取为多字节整数,而无需了解本机字节顺序。

于 2019-11-04T14:40:14.423 回答