私は持っている
const uint8_t longByteTable[16][256][16] = { { { 0x00, ... } } };
ハードコードされたオクテット値の 3 次元 16x256x16 配列として宣言されています。
最適化の目的やその他のさまざまな理由から、この配列を uint64_t 値の 3 次元の 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;
それを行う適切な方法は?
PSlongByteTable
後者のタイプでは宣言できません。異なるエンディアンでは適切に機能せず、異なるエンディアンに対して異なるテーブルを宣言するか、ランタイムチェックとローテーションを実行する必要があるためです。はい、再解釈された配列のそれ以降のすべての変換は、エンディアン不変です。