0

常に 236 バイトになるブロックの量があります。そして、ブロックに収まる必要があるエントリがいくつかあります。これらはブロックに完全に収まらない場合があるため、ブロックにはいくつかの null バイトが残ります。

エントリを書き込む場所と、これをどのブロックに配置するかを考えています。

        int blocklen = 236;//always the same

        int entryindex = 14;//example index of an entry to write
        int entrylength = 16;//this will be the same in all entries in these blocks.
        int blockindex = ((entryindex + 1) * entrylength) / blocklen;//this works and will correctly calculate the index of the block to write to.
        int offset = ((entryindex) * entrylength) % blocklen;// this is incorrect, I need it to work out the offset with in the block.

私の entryindex が 13 の場合、ブロック 0 の @ 208 として機能し、その通りです。ただし、14 の場合は最初のブロックに収まらないため、ブロック 1 @ 0 にする必要がありますが、代わりにオフセット 224 でブロック 1 と表示され、224 は最初のブロックのオフセットですが、次のブロックに引き継ぐ必要があります。ブロック。

とにかく数学が苦手で、私の日ではないので、そのコード行で誰かが私を助けてくれるかどうか疑問に思っていました.

4

1 に答える 1

2

あなたの blocklen は 16 の倍数ではありません!

14 * 16 = 224

したがって、オフセットは次のようになります。

int entries_per_block = 14;

int offset = (entryindex * entrylength) % (entrylength * entries_per_block);

ブロックインデックスは次のようにする必要があります。

int blockindex = (entryindex * entrylength) / (entrylength * entries_per_block);
于 2013-02-19T14:08:52.790 に答える