Я пытался заставить работать проверку CRC16, но мне кажется, что я не понимаю, как это сделать. Я следовал некоторым учебникам и проверял некоторые вопросы здесь, но я не могу заставить его работать.
Я использую предопределенный CRC-16 / CCITT
crc16 = crcmod.predefined.Crc('xmodem')
# INIT
bytestr = bytearray("Hello World, I am here!\n".encode('utf-8'))
count = len(bytestr)
progress = 0
fragment = 7
fragments = []
# FRAGMENTING
while count > 0:
fragments.append(bytestr[progress:progress+fragment])
progress += fragment
count -= fragment
# CRC CALCULATION
crc16.update(fragments[0])
fragments[0] += crc16.digest()
crc16.update(fragments[0])
print(crc16.hexdigest())
crc16.new()
Я не держуполучить 0000, чтобы подтвердить, что это правильно. Я попытался использовать hexlify как какой-то другой заданный вопрос, затем использовать crc16 для него, затем добавить дайджест crc к его концу (я убедился, что сохранил новый фрагмент как версию hexlify + дайджест). Но даже тогда, когда я проверял, все равно не было 0000.
crc16.update(hexlify(fragments[0]))
fragments[0] = hexlify(fragments[0]) + crc16.digest()
crc16.update(fragments[0])
print(crc16.hexdigest())
crc16.new()
Как правильно это сделать?
Примечание: я попытался сторнировать вывод дайджеста crc16 перед его добавлениемк фрагменту