2011-09-29 25 views
6

Estoy teniendo algunas dificultades para cambiar un hex a un int/char (char preferiblemente). A través del sitio web; http://home2.paulschou.net/tools/xlate/ Ingresé el hex de C0A80026 en la caja hexagonal, en la caja DEC/CHAR, emite correctamente el IP que esperaba que contuviera.Python - Conversión de hexadecimal a INT/CHAR

Estos datos se extraen de una base de datos externa y no sé cómo se guarda, por lo que todo lo que tengo que trabajar es la cadena hexadecimal.

He intentado utilizar la función binascii.unhexlify para ver si puedo descifrarlo, pero me temo que no tengo suficiente comprensión de hexadecimal como para apreciar lo que estoy haciendo.

Intentar imprimir simplemente utilizando un int() cast tampoco ha producido los resultados requeridos. Necesito alguna forma de convertir esa cadena hexadecimal (o una similar) a la IP original.

ACTUALIZACIÓN: Para cualquier persona que se encuentre con esto en el futuro, modifiqué ligeramente la siguiente respuesta para proporcionar una impresión exacta como una IP;

dec_output = str(int(hex_input[0:2], 16)) + "." + str(int(hex_input[2:4], 16)) + "." + str(int(hex_input[4:6], 16)) + "." + str(int(hex_input[6:8], 16)) 
+0

posible duplicado de [cadena hexadecimal Convertir to int en Python] (http://stackoverflow.com/questions/ 209513/convert-hex-string-to-int-in-python) –

+0

Esa solución no funciona con mi problema – Draineh

+0

Explique exactamente cómo la pregunta de duplicación no es un duplicado. Los detalles importan "no funciona con mi problema" es demasiado vago para significar cualquier cosa. –

Respuesta

6

Si desea obtener 4 números separados de esto, entonces lo tratan como 4 números separados. No necesita binascii.

hex_input = 'C0A80026' 
dec_output = [ 
    int(hex_input[0:2], 16), int(hex_input[2:4], 16), 
    int(hex_input[4:6], 16), int(hex_input[6:8], 16), 
] 
print dec_output # [192, 168, 0, 38] 

Esto se puede generalizar, pero lo dejo como un ejercicio para usted.

+0

Perfecto, gracias – Draineh

0

espero que sea lo que espera:

hex_val = 0x42424242  # hexadecimal value 
int_val = int(hex_val) # integer value 
str_val = str(int_val) # string representation of integer value 
+0

Literal '0x4242422' ya crea un entero,' int (hex_val) 'es redundante. –

4

También podría ser necesario la función CHR:

chr(65) => 'A' 
+0

chr solo acepta números enteros. La pregunta establece claramente que el usuario necesita convertir un hexágono en int/char (no int a char) y chr solo acepta enteros, por lo que no es una solución. –

1
>>> htext='C0A80026' 
>>> [int(htext[i:i+2],16) for i in range(0,len(htext),2)] 
# [192, 168, 0, 38] 
6

Una forma sencilla

>>> s = 'C0A80026' 
>>> map(ord, s.decode('hex')) 
[192, 168, 0, 38] 
>>> 

si lo prefiere listas por comprensión

>>> [ord(c) for c in s.decode('hex')] 
[192, 168, 0, 38] 
>>> 
+0

Agradable.Yo personalmente lo escribo como una lista de comprensión, pero eso es puramente gusto. Me gusta el uso de 'decode' y' ord'. – neil

+0

gracias @neil. Me gusta la lista de comprensiones también. –

Cuestiones relacionadas