2012-05-16 13 views
14

que tiene una cadena hexadecimal como:cadena hexadecimal a este personaje en pitón

data = "437c2123" 

Quiero convertir esta cadena para una secuencia de caracteres de acuerdo con la tabla ASCII. El resultado debe ser como:

data_con = "C|!#" 

¿Puede alguien decirme cómo hacer esto?

+1

¿Por qué estás citando el código C, si esta es una pregunta de Python? ¿Y qué has intentado hasta ahora? – unwind

+1

¿Qué tipo de pitón es este? : D – jamylak

+1

Después de su edición, es mejor, ustedes pueden detener los votos cerrados. – jamylak

Respuesta

18
In [17]: data = "437c2123" 

In [18]: ''.join(chr(int(data[i:i+2], 16)) for i in range(0, len(data), 2)) 
Out[18]: 'C|!#' 

Aquí:

  • for i in range(0, len(data), 2) itera sobre cada segunda posición en data: 0, 2, 4 etc.
  • data[i:i+2] mira a cada par de dígitos hexadecimales '43', '7c', etc.
  • chr(int(..., 16)) convierte el par de dígitos hexadecimales en el carácter correspondiente.
  • ''.join(...) combina los caracteres en una sola cadena.
+0

if data = "aabbccdd", me refiero a que la conversión de hex es invisible, ¿qué debo hacer? ¿puede almacenar los personajes correctos? No necesito imprimir la cadena, pero espero que pueda almacenar los valores correctos. gracias – Alice

-3

La función ord convierte caracteres en valores numéricos y la función chr hace lo contrario. Así que para convertir a 97"a", hacer ord(97)

+0

'False' y su respuesta no cubre lo suficiente como para ser considerada una respuesta. 'ord' no toma un parámetro entero. – jamylak

37

En python2

>>> "437c2123".decode('hex') 
'C|!#' 

En python3 (también funciona en python2, por < 2.6 no se puede tener el prefijo b la cadena)

>>> import binascii 
>>> binascii.unhexlify(b"437c2123") 
b'C|!#' 
-1

Desde Python 2.6 puede usar simple:

data_con = bytes.fromhex(data) 
Cuestiones relacionadas