¿Convertir de cadena ASCII codificada en hexadecimal a ASCII simple?

¿Cómo puedo convertir de hex a ASCII simple en Python?

Tenga en cuenta que, por ejemplo, quiero convertir “0x7061756c” a “paul”.

Una solución un poco más simple:

>>> "7061756c".decode("hex") 'paul' 

No es necesario importar ninguna biblioteca:

 >>> bytearray.fromhex("7061756c").decode() 'paul' 
 >>> txt = '7061756c' >>> ''.join([chr(int(''.join(c), 16)) for c in zip(txt[0::2],txt[1::2])]) 'paul' 

Me estoy divirtiendo, pero las partes importantes son:

 >>> int('0a',16) # parse hex 10 >>> ''.join(['a', 'b']) # join characters 'ab' >>> 'abcd'[0::2] # alternates 'ac' >>> zip('abc', '123') # pair up [('a', '1'), ('b', '2'), ('c', '3')] >>> chr(32) # ascii to character ' ' 

mirará binascii ahora …

 >>> print binascii.unhexlify('7061756c') paul 

genial (y no tengo idea de por qué otras personas quieren hacerte saltar a través de aros antes de que te ayuden).

Aquí está mi solución cuando se trabaja con enteros hexadecimales y no cadenas hexadecimales:

 def convert_hex_to_ascii(h): chars_in_reverse = [] while h != 0x0: chars_in_reverse.append(chr(h & 0xFF)) h = h >> 8 chars_in_reverse.reverse() return ''.join(chars_in_reverse) print convert_hex_to_ascii(0x7061756c) 

En Python 2:

 >>> "7061756c".decode("hex") 'paul' 

En Python 3:

 >>> bytes.fromhex('7061756c').decode('utf-8') 'paul' 

Probado en Python 3.3.2 Hay muchas maneras de lograr esto, aquí está una de las más cortas, usando solo las cosas proporcionadas por python:

 import base64 hex_data ='57696C6C20796F7520636F6E76657274207468697320484558205468696E6720696E746F20415343494920666F72206D653F2E202E202E202E506C656565656173652E2E2E212121' ascii_string = str(base64.b16decode(hex_data))[2:-1] print (ascii_string) 

Por supuesto, si no desea importar nada, siempre puede escribir su propio código. Algo muy básico como este:

 ascii_string = '' x = 0 y = 2 l = len(hex_data) while y <= l: ascii_string += chr(int(hex_data[x:y], 16)) x += 2 y += 2 print (ascii_string) 

Alternativamente, también puedes hacer esto …

Intérprete de Python

 print "\x70 \x61 \x75 \x6c" 

Ejemplo

 user@linux:~# python Python 2.7.14+ (default, Mar 13 2018, 15:23:44) [GCC 7.3.0] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> print "\x70 \x61 \x75 \x6c" paul >>> exit() user@linux:~# 

o

Python One-Liner

 python -c 'print "\x70 \x61 \x75 \x6c"' 

Ejemplo

 user@linux:~# python -c 'print "\x70 \x61 \x75 \x6c"' paul user@linux:~#