3

我有一个 6 的数组,uint16_t实际上是 3 uint32_t,位的顺序正确。如何尽可能有效地将前者转换为后者?

数组中元素的数量在编译时是已知的。

4

2 回答 2

11

或许像这样:

uint16_t arr16[6];
uint32_t *parr32 = (uint32_t*)(&arr16);

现在您可以使用parr32[i]来引用覆盖arr16数组的元素。

于 2013-07-09T12:54:26.943 回答
1

在您的小端机器上,您的字节排列为

b a d c f e h g

等等,因此将指向第一个 int16_t 的指针投射a到 anint32_t*将给出错误的结果(甚至可能崩溃),因为它位于第一个 int32_t 的中间。在大端机器上,字节排列为

a b c d e f g h

然后将int16_t*指向 的 转换a为 anint32_t*将产生正确的结果。

于 2013-07-09T13:19:02.023 回答