需求:有关如何计算大文件的CRC的更多细节

She*_*nde 0 crc32 crc mhash

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

也许这是一个错误的问题(这将是我无知的衡量标准),但具体而言,如何将前一次迭代中计算出的crc添加到下一个要处理的块中是合法的?这是否会严重降低整体计算速度,是否可能会将新异常引入其他未被清除的数据?TIA

Mar*_*ler 5

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

如果要计算多核上的CRC,则需要一个更复杂的过程来将并行计算的CRC与零作为起点进行组合,但是您希望结果就像CRC与串行完成一样适当的起点.zlib crc32_combine()为此提供了例程.有关更多信息,请参阅zlib手册.