0

我正在使用标准 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
4

1 回答 1

1

生成的是校验和,无法转换回 ascii。

于 2020-10-13T10:24:53.117 回答