Преобразовать Python binascii.crc_hqx () обратно в ascii - PullRequest
0 голосов
/ 18 февраля 2020

Я использую стандартную 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
...