2

私は持っている

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後者のタイプでは宣言できません。異なるエンディアンでは適切に機能せず、異なるエンディアンに対して異なるテーブルを宣言するか、ランタイムチェックとローテーションを実行する必要があるためです。はい、再解釈された配列のそれ以降のすべての変換は、エンディアン不変です。

4

1 に答える 1