Python:binascii.a2b_hex给出“奇数长度字符串”

时间:2010-09-16 22:18:37

标签: python

我有一个十六进制值,我从文本文件中抓取,然后我将它传递给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 个答案:

答案 0 :(得分:8)

你确定文件中没有额外的东西吗?例如,空白?

尝试k1.strip()

答案 1 :(得分:5)

我怀疑文件末尾有一个尾随的换行符。在将字符串传递给binascii之前将其删除。

请注意,现在还有一个更简单的拼写:k1.strip().decode('hex')

答案 2 :(得分:3)

如果您执行以下代码,我会更感兴趣:

with open("./" + basefile + ".key") as key_file:
   key = key_file.read()
   print len(key), key

小心告诉?打印时可能还有一些额外的字符。在这些情况下,请确保打印字符串的长度。

答案 3 :(得分:3)

read()不会删除换行符。如果文件末尾有'\n',则它会在k1中。

尝试binascii.a2b_hex(k1.strip())或可能binascii.a2b_hex(k1[:8])