Req: Подробнее о том, как рассчитать CRC для большого файла

К сожалению, Каков правильный способ вычисления большого CRC32? мне недостаточно, чтобы понять, как реализовать расчет CRC для файла размером 1kb ‹= x‹ = 128kb. Библиотека mhash скрывает проблему и поэтому подходит и удобна для меня, тем не менее, я хотел бы попросить вас объяснить, как можно объединить несколько CRC в один.

Возможно, это неправильный вопрос (который в таком случае будет мерой моего незнания), но, в частности, как законно добавлять crc, вычисленный в предыдущей итерации, к следующему блоку для обработки? Разве это не сильно замедляет общий расчет и потенциально не вносит новые аномалии в незапятнанные данные? TIA


person Shellsunde    schedule 03.06.2013    source источник


Ответы (1)


Нет никакого предварения. Обычный подход заключается в том, что процедура CRC принимает текущую CRC в конце последнего блока в качестве начальной CRC для следующего блока. Т.е. crc = crc32(crc, buf, len);. При первом вызове начальный CRC (обычно) равен нулю, поэтому crc = crc32(0, firstbuf, firstlen);.

Если вы хотите вычислить CRC по нескольким ядрам, то необходима более сложная процедура для объединения CRC, которые все были рассчитаны параллельно, с нулем в качестве отправной точки, но вы хотите, чтобы результат был таким, как если бы CRC были выполнены последовательно с соответствующие отправные точки. zlib предоставляет для этой цели процедуру crc32_combine(). Дополнительную информацию см. В руководстве по zlib.

person Mark Adler    schedule 03.06.2013
comment
Спасибо, мистер Адлер. (Я не могу проголосовать за ответ, у меня нет представителя.) - person Shellsunde; 06.06.2013