а также

у программу на Python для извлечения данных из середины файла размером 6 ГБ bz2. Файл bzip2 состоит из независимо дешифруемых блоков данных, поэтому мне нужно только найти блок (они разделены магическими битами), затем создать временный одноблочный файл bzip2 из него в памяти и, наконец, передать его Функция bz2.decompress. Легко нет?

The bzip2формат имеет контрольную сумму crc32 для файла в конце. Нет проблем, binascii.crc32 на помощь. Но ждать. Данные для контрольной суммы не обязательно заканчиваются границей байтов, а функция crc32 работает с целым числом байтов.

Мой план: использовать функцию binascii.crc32 для всех, кроме последнего байта, а затем собственную функцию для обновления вычисленного значения crc последними 1–7 битами. Но часы кодирования и тестирования оставили меня в замешательстве, и моя загадка может быть сведена к следующему вопросу: почему crc32 ("\ x00") не равен 0x00000000? Разве это не должно быть, согласно статье в Википедии?

Вы начинаете с 0b00000000 и дополняете 32 0, затем выполняете полиномиальное деление с 0x04C11DB7 до тех пор, пока в первых 8 битах не останется ни одного, что сразу. Ваши последние 32 бита являются контрольной суммой, и как это может быть не все нули?

Я искал в Google ответы и посмотрел код нескольких реализаций CRC-32, не найдя ни малейшего понятия, почему это так.

Ответы на вопрос(2)

Ваш ответ на вопрос