Я использую стандартную Python3 lib binascii
и, в частности, функцию crc_hqx()
binascii. crc_hqx (data, value)
Вычисляет 16-битное значение CR C данных, начиная со значения в качестве начального CR C, и возвращает результат. При этом используется полином CR C -CCITT x16 + x12 + x5 + 1, часто представляемый как 0x1021. Этот CR C используется в формате binhex4.
Я могу преобразовать в CR C с этим кодом:
import binascii
t = 'abcd'
z = binascii.crc_hqx(t.encode('ascii'), 0)
print(t,z)
, который, как и ожидалось, печатает строку
abcd 43062
Но как мне конвертировать обратно в ASCII?
Я пробовал варианты с функцией a2b_hqx()
binascii.a2b_hqx (строка)
Преобразование данных ASCII в формате binhex4 в двоичные файлы без декомпрессии RLE. Строка должна содержать полное число двоичных байтов или (в случае последней части данных binhex4) оставшиеся биты равны нулю.
Простейшей версией будет:
y = binascii.a2b_hqx(str(z))
Но я также пробовал варианты с bytearray()
и str.encode()
, et c.
Для этого кода:
import binascii
t = 'abcd'
z = binascii.crc_hqx(t.encode('ascii'), 0)
print(t,z)
y = binascii.a2b_hqx(str(z))
Traceback:
abcd 43062
Traceback (most recent call last):
File "test.py", line 5, in <module>
y = binascii.a2b_hqx(str(z))
binascii.Incomplete: String has incomplete number of bytes
И с этим кодом:
y = binascii.a2b_hqx(bytearray(z))
Этот Traceback:
binascii.Error: Illegal char