Непрерывные вычисления на Python CRC32

#python-3.x #crc32

#python-3.x #crc32

Вопрос:

поймите, что самый простой способ использовать встроенную функцию для вычислений CRC32 — это zlib. Например:

 import zlib
zlib.crc32('hello-world')
  

Однако что, если у меня есть сценарий, в котором я хочу прочитать 32-битное слово (0x89abcdef) из файла, а файл содержит миллионы 32-битных слов?

если я прочитаю их построчно, и как мне сохранить предыдущий результат вычисления и использовать его для продолжения вычисления следующей строки CRC32, пока я не получу окончательный результат вычисления?

Кроме того, я не уверен, что альтернативный способ — это просто объединить эти несколько миллионов строк в одно сверхдлинное слово и просто передать его в функцию zlib crc32?

какой из них является лучшим способом для достижения этой цели?

Ответ №1:

zlib.crc32() в Python имеет необязательный второй аргумент, который является запущенным CRC-32. Вы можете вычислить CRC для серии блоков следующим образом:

 crc = zlib.crc32(chunk1, 0)
crc = zlib.crc32(chunk2, crc)
...
crc = zlib.crc32(chunkn, crc)
  

Теперь crc является CRC-32 конкатенации chunk1 через chunkn .