令人遗憾的是,What is the correct way of calculating a large CRC32不足以让我理解如何在大小为1kb< = x< = 128kb的文件上实现crc的计算。 mhash库隐藏了这个问题,因此对我来说是合适和方便的,但是,我想请你解释一下如何将多个crcs合并为一个。
也许这是一个错误的问题(这将是我无知的衡量标准),但具体来说,如何将前一次迭代中计算出的crc添加到下一个要处理的块中是合法的?这是否会严重降低整体计算速度,是否可能会将新异常引入其他未被清除的数据? TIA
答案 0 :(得分:5)
没有预先支出。通常的方法是CRC例程将最后一个块结束时运行的CRC作为下一个块的起始CRC。即crc = crc32(crc, buf, len);
。它第一次称为初始CRC(通常)为零,因此crc = crc32(0, firstbuf, firstlen);
。
如果你想计算多个核心的CRC,那么需要一个更复杂的程序来将所有并行计算的CRC与零作为起点组合,但是你希望结果就好像CRC完成了与适当的起点串联。 zlib为此提供了crc32_combine()
例程。有关详细信息,请参阅zlib manual。