我使用的是标准Python3库binascii
,特别是crc_hqx()
函数
binasci.crc_hqx(数据,值(
计算数据的16位CRC值,从值作为初始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()
功能的变体
binasci.a2b_hqx(字符串(
将binhex4格式的ASCII数据转换为二进制,无需进行RLE解压缩。该字符串应包含完整数量的二进制字节,或者(在binhex4数据的最后部分的情况下(使剩余位为零。
最简单的版本是:
y = binascii.a2b_hqx(str(z))
但我也尝试过bytearray()
和str.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
生成的是校验和,不可能转换回ascii。