我有一个 6 的数组,uint16_t
实际上是 3 uint32_t
,位的顺序正确。如何尽可能有效地将前者转换为后者?
数组中元素的数量在编译时是已知的。
或许像这样:
uint16_t arr16[6];
uint32_t *parr32 = (uint32_t*)(&arr16);
现在您可以使用parr32[i]
来引用覆盖arr16
数组的元素。
在您的小端机器上,您的字节排列为
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*
将产生正确的结果。