2010-09-16 8 views
5

Ho un valore esadecimale che sto acquisendo da un file di testo, quindi lo sto passando a a2b_hex per convertirlo nella corretta rappresentazione binaria. Ecco quello che ho:Python: binascii.a2b_hex fornisce "Stringa lunghezza dispari"

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

Quando stampo k1, è come ci si aspetta: 81e3d6df

Ecco il messaggio di errore:

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

Qualche suggerimento? Grazie!

+0

Grazie a tutti. Avevo provato a togliere l'input prima, ma non l'ho fatto k1 = strip (k1). Ho fatto strip (k1). – Magicked

risposta

7

Sei sicuro che il file non contenga qualcosa in più? Spazio bianco, ad esempio?

Prova k1.strip()

4

Sospetto che ci sia una fine riga finale alla fine del file. Striscia la stringa prima di passarla a binascii.

Nota ora c'è anche una più semplice ortografia: k1.strip().decode('hex').

+0

A volte quando si chiama 'text.strip(). Decode ('hex')' solleva 'TypeError: Odd-length string' too :( – 0x90

2

Io sono più interessato che cosa succede se si esegue il seguente codice:

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

cura di dire? Probabilmente c'è qualche carattere in più che non vedi quando stampi. In questi casi, assicurati di stampare la lunghezza della stringa.

3

read() non striscia a capo. Se c'è un '\n' alla fine del tuo file, sarà in k1.

Provare binascii.a2b_hex(k1.strip()) o eventualmente binascii.a2b_hex(k1[:8]).

Problemi correlati