#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
.