2010-09-16 18 views
5

Tengo un valor hexadecimal que estoy agarrando de un archivo de texto, luego lo paso a a2b_hex para convertirlo a la representación binaria correcta. Aquí es lo que tengo:Python: binascii.a2b_hex da "Cadena de longitud impar"

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

Al imprimir k1, que es como se esperaba: 81e3d6df

Aquí está el mensaje de error:

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

¿Alguna sugerencia? ¡Gracias!

+0

Gracias a todos. Intenté quitar la entrada antes, pero no hice k1 = strip (k1). Me desnudé (k1). – Magicked

Respuesta

7

¿Estás seguro de que el archivo no tiene algo extra? Espacios en blanco, por ejemplo?

Trate k1.strip()

4

Sospecho que hay una nueva línea al final del archivo. Pela la cuerda antes de pasarla al binascii.

Nota ahora también hay una ortografía más simple: k1.strip().decode('hex').

+0

A veces, cuando se llama a 'text.strip(). Decode ('hex')', se levanta 'TypeError: Odd-length string' también :( – 0x90

2

Me interesa más lo que ocurre si se ejecuta el siguiente código:

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

Cuidado para decir? Probablemente haya algún carácter adicional que no se ve al imprimir. En estos casos, asegúrese de imprimir la longitud de la cadena.

3

read() no tira de nuevas líneas. Si hay un '\n' al final de su archivo, estará en k1.

Pruebe binascii.a2b_hex(k1.strip()) o posiblemente binascii.a2b_hex(k1[:8]).

Cuestiones relacionadas