重传的字节序

问题描述 投票:0回答:1

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

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

输出的字节序错误,如果要在大字节序或小字节序上进行编码,是否可以指定reinterpret_cast

谢谢!

c++ endianness reinterpret-cast uint16
1个回答
0
投票

我有一个指向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?

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

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

© www.soinside.com 2019 - 2024. All rights reserved.