我有一个指向uint8_t的指针。每2个元素实际上是一个uint_16_t值,我想使用reinterpret_cast
:
uint16_t *Dst16Rgb = reinterpret_cast<uint16_t*>(Dst8Rgb);
输出的字节序错误,是否可以指定reinterpret_cast
,如果我想在小字节序或大字节序上进行呢?
谢谢!
我有一个指向uint8_t的指针。每2个元素实际上是一个uint_16_t值,我想使用reinterpret_cast
:
uint16_t *Dst16Rgb = reinterpret_cast<uint16_t*>(Dst8Rgb);
输出的字节序错误,是否可以指定reinterpret_cast
,如果我想在小字节序或大字节序上进行呢?
谢谢!
我有一个指向uint8_t的指针。实际上,每2个元素都是uint_16_t
您实际上有一个uint8_t
数组,或者您实际上有一个uint_16_t
数组。不能两者都是。
uint16_t *Dst16Rgb = reinterpret_cast<uint16_t*>(Dst8Rgb);
由于指向的地址处没有uint16_t
对象,因此通过重新解释指针进行间接操作将具有不确定的行为。
即使禁用严格的别名,除非您保证字节数组对于uint_16_t
足够对齐,否则UB仍然存在。
如果我想在小端或大端上执行,是否可以指定reinterpret_cast?
不。数据总是以本地字节序重新解释。如果输入字节的字节序不同,则结果将为“错误”。
您必须知道输入数据的字节序。您可以将字节读取为多字节整数,而无需通过移位和屏蔽来了解本机字节序。