0

遗憾的是,什么是计算大 CRC32 的正确方法不足以让我理解如何在大小为 1kb <= x <= 128kb 的文件上实现 crc 的计算。mhash 库隐藏了这个问题,因此对我来说很合适和方便,但是,我想请您解释一下如何将多个 crcs 组合为一个。

也许这是一个错误的问题(这将是我无知的衡量标准),但具体来说,将在前一次迭代中计算的 crc 预置到下一个要处理的块之前是合法的吗?这不会严重减慢整体计算速度,并且不会潜在地将新的异常引入其他未受污染的数据中吗?TIA

4

1 回答 1

5

没有前置。通常的方法是 CRC 例程将最后一个块末尾的运行 CRC 作为下一个块的起始 CRC。即crc = crc32(crc, buf, len);。第一次称为初始 CRC 时(通常)为零,因此crc = crc32(0, firstbuf, firstlen);.

如果要在多个内核上计算 CRC,则需要一个更复杂的过程来组合所有以零为起点并行计算的 CRC,但您希望结果就像 CRC 是与适当的起点。zlibcrc32_combine()为此提供了例程。有关更多信息,请参阅zlib 手册

于 2013-06-03T21:24:37.263 回答