Python:binascii.a2b_hex报错“奇数长度字符串”

9 投票
4 回答
68421 浏览
提问于 2025-04-16 04:15

我有一个十六进制的值,是从一个文本文件中获取的,然后我把它传给a2b_hex这个函数,目的是把它转换成正确的二进制表示。下面是我写的代码:

k = open('./' + basefile + '.key', 'r')
k1 = k.read()
k.close()
my_key = binascii.a2b_hex(k1)

当我打印k1的时候,结果是我预期的:81e3d6df

但是我遇到了这个错误信息:

Traceback (most recent call last):
  File "xor.py", line 26, in <module>
    my_key = binascii.a2b_hex(k1)
TypeError: Odd-length string

有什么建议吗?谢谢!

4 个回答

3

read() 这个函数不会去掉换行符。如果你的文件最后有一个 '\n',那么它会保留在 k1 里面。

你可以试试 binascii.a2b_hex(k1.strip()),或者也可以用 binascii.a2b_hex(k1[:8])

6

我怀疑文件的最后有一个多余的换行符。在把字符串传给 binascii 之前,先把它去掉。

另外,现在还有一个更简单的写法:k1.strip().decode('hex')

8

你确定这个文件里没有多余的东西吗?比如说空格之类的?

可以试试用 k1.strip() 这个方法。

撰写回答