0

我正在读出一个文件,计算可以与 ord() 函数一起使用的 ord-number。

之后,我解开这个数字以获得这个字符的字节表示,因为我使用非 ASCII 字符并将它们写入文件。

一切工作正常,直到我读出一个更好地称为回车的“CR”。

我的程序引发错误:

Traceback (most recent call last):
  File "C:\Users\#######", line xx:
    x2 = binascii.unhexlify(format(Echr,"x"))
binascii.Error: Odd-length string

您知道为什么会出现此错误以及如何解决此问题吗?到目前为止,CR 正在引发此错误。

4

1 回答 1

1

您正在尝试将奇数长度的字符串传递给unhexlify,它只能处理成对的十六进制字符。

如果您从 0-255 范围内的整数值生成十六进制,请确保用 0填充您的十六进制字符串:

x2 = binascii.unhexlify(format(Echr, "02x"))

02xformatted 告诉函数将format()您的数字放入宽度为 2 的字段中,如果实际值较短,则使用前导零:

>>> format(13, '02x')
'0d'
>>> binascii.unhexlify(format(10, '02x'))
'\r'

binascii.unhexlify然而,与 with 一起使用是format()一种创建字节的迂回方式。你可以跳过所有这些,直接进入chr()函数,它从整数中产生一个字符:

>>> chr(13)
'\r'
于 2016-05-23T12:24:32.307 回答