字节序在reinterpret_cast上

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

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

输出的字节序错误,是否可以指定reinterpret_cast,如果我想在小字节序或大字节序上进行呢?

谢谢!

qq1151873004 回答:字节序在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?

不。数据总是以本地字节序重新解释。如果输入字节的字节序不同,则结果将为“错误”。

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

本文链接:https://www.f2er.com/3165990.html

大家都在问