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

And*_*eas 2 c arrays embedded

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

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

Dav*_*nan 10

也许这样:

uint16_t arr16[6];
uint32_t *parr32 = (uint32_t*)(&arr16);
Run Code Online (Sandbox Code Playgroud)

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

  • 注意对齐问题.某些处理器可能要求uint32_t在32位边界上对齐.但由于arr16被声明为uint16_t,因此它可能无法在32位边界上对齐.然后将arr16转换为uint32_t可能会产生未定义的行为.您可以使用编译器特定的pragma伪指令强制arr16在32位边界上对齐. (6认同)