我正在使用标准 Python3 lib binascii
,特别是crc_hqx()
函数
binascii.crc_hqx(数据,值)
计算数据的 16 位 CRC 值,以 value 作为初始 CRC 开始,并返回结果。这使用 CRC-CCITT 多项式 x16 + x12 + x5 + 1,通常表示为 0x1021。此 CRC 以 binhex4 格式使用。
我可以使用以下代码转换为 CRC:
import binascii
t = 'abcd'
z = binascii.crc_hqx(t.encode('ascii'), 0)
print(t,z)
正如预期的那样,它打印了该行
abcd 43062
但是如何转换回 ASCII?
我已经尝试了该a2b_hqx()
功能的变体
binascii.a2b_hqx(字符串)
将 binhex4 格式的 ASCII 数据转换为二进制,而不进行 RLE 解压缩。该字符串应包含完整数量的二进制字节,或者(如果是 binhex4 数据的最后一部分)剩余位为零。
最简单的版本是:
y = binascii.a2b_hqx(str(z))
但我也尝试过bytearray()
andstr.encode()
等的变体。
对于此代码:
import binascii
t = 'abcd'
z = binascii.crc_hqx(t.encode('ascii'), 0)
print(t,z)
y = binascii.a2b_hqx(str(z))
回溯:
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))
这个追溯:
binascii.Error: Illegal char