如何有效地将uint16_t [2N]转换为uint32_t [N]?

时间:2013-07-09 12:51:37

标签: c arrays embedded

我有一个六个uint16_t的数组,实际上是三个uint32_t,其中的位数顺序正确。如何尽可能有效地将前者投射到后者?

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

2 个答案:

答案 0 :(得分:10)

或许这样:

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

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

答案 1 :(得分:1)

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

b a d c f e h g

等,所以将指向第一个int16_t的指针(指向a)转换为int32_t*会产生错误的结果(甚至可能会崩溃),因为它位于第一个中间int32_t。在大端机器上,字节排列为

a b c d e f g h

然后将指向int16_t*的{​​{1}}投射到a会产生正确的结果。