将多维数组转换为另一种类型

时间:2016-04-06 10:38:58

标签: c multidimensional-array casting c89 ansi-c

我有

const uint8_t longByteTable[16][256][16] = { { { 0x00, ... } } };

声明为硬编码八位字节值的三维16x256x16数组。

出于优化目的和其他各种原因,我需要将此数组解释为uint64_t值的三维16x256x2数组:

const uint64_t reinterpretedTable[16][256][2];

我需要的是在严格的ISO / ANSI C longByteTable reinterpretedTable 的有效方法 。是这样的:

const uint64_t (*reinterpretedTable)[256][2] = 
    (const uint64_t(*)[256][2])longByteTable;

这样做的正确方法?

P.S。我不能用后一种类型声明longByteTable,因为它不能正确地使用不同的字节顺序,我要么需要为不同的字节序声明不同的表,要么执行一些运行时检查和旋转。是的,重新解释数组的所有进一步转换都是字节不变的。

1 个答案:

答案 0 :(得分:2)

由于C的指针别名规则,您无法进行此类强制转换。唯一安全的方法是使用联合:

RadioButtonList

虽然请注意,这仍然会使您的代码依赖于endianess。使代码endianess-indepentent的唯一方法是使用位移为大型整数类型赋值。