Req: Больше подробностей о том, как рассчитать CRC большого файла
К сожалению, что является правильным способом вычисления большого CRC32, мне недостаточно, чтобы понять, как реализовать вычисление CRC для файла размером 1 КБ <= x <= 128 КБ. Библиотека mhash скрывает эту проблему и поэтому подходит и удобна для меня, тем не менее, я хотел бы попросить вас объяснить, как объединить множество crcs в одну.
Возможно, это неправильный вопрос (который будет мерой моего невежества), но, в частности, как законно добавлять к вычислениям CRC, вычисленный в предыдущей итерации, к следующему блоку для обработки? Не сильно ли это замедляет общий расчет и не вносит ли он новые аномалии в другие незапятнанные данные? ТИА
1 ответ
Там нет предваряющих. Обычный подход заключается в том, что подпрограмма CRC принимает запущенный CRC в конце последнего блока в качестве начального CRC для следующего блока. Т.е. crc = crc32(crc, buf, len);
, Первый раз, когда он называется, исходный CRC (обычно) равен нулю, поэтому crc = crc32(0, firstbuf, firstlen);
,
Если вы хотите рассчитать CRC по нескольким ядрам, тогда требуется более сложная процедура для объединения CRC, которые все были рассчитаны параллельно с нулем в качестве отправной точки, но вы хотите, чтобы результат был таким, как если бы CRC были сделаны последовательно с соответствующие отправные точки. Zlib обеспечивает crc32_combine()
рутина для этой цели. Смотрите руководство zlib для получения дополнительной информации.