我有一个十六进制值,我从文本文件中抓取,然后我将它传递给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
有什么建议吗?谢谢!
答案 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])
。