0

我有一定数量的块,总是 236 字节。然后我有一些条目需要放入块中,这些条目有时不能完美地放入块中,因此该块将留下一些空字节。

我正在尝试确定写入条目的位置以及应该在哪个块中。

        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);

和 blockindex 应该是:

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