2010-09-16 151 views
5

我有一個十六進制值,我從文本文件抓取,然後將它傳遞給a2b_hex以將其轉換爲正確的二進制表示形式。以下是我有:Python:binascii.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

謝謝大家。我曾嘗試過去除輸入,但我沒有做k1 = strip(k1)。我做了剝離(k1)。 – Magicked 2010-09-16 22:25:33

回答

7

你確定該文件沒有額外的東西嗎?空白,例如?

嘗試k1.strip()

4

我懷疑在文件末尾有一個尾隨換行符。在將字符串傳遞給binascii之前將其去掉。

請注意,現在還有一個更簡單的拼寫:k1.strip().decode('hex')

+0

有時,當調用'text.strip()。decode('hex')'時,會引發'TypeError:奇數長度的字符串':( – 0x90 2014-01-07 22:06:23

2

我更感興趣,如果你執行下面的代碼會發生什麼:

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

介意告訴?打印時可能會看到一些額外的字符。在這些情況下,請務必打印字符串的長度。

3

read()不去掉換行符。如果文件末尾有'\n',則該文件位於​​。

嘗試binascii.a2b_hex(k1.strip())或可能的binascii.a2b_hex(k1[:8])