print convertir bytes binascii binario python hex ascii

convertir - print bytes python



Convierte de cadena ASCII codificada en hexadecimal a simple ASCII? (7)

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

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


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" p a u l >>> exit() user@linux:~#

o

Python One-Liner

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

Ejemplo

user@linux:~# python -c ''print "/x70 /x61 /x75 /x6c"'' p a u l user@linux:~#


Aquí está mi solución al trabajar con enteros hexadecimales y no con cadenas hexagonales:

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)


No es necesario importar ninguna biblioteca:

>>> bytearray.fromhex("7061756c").decode() ''paul''


Probado en Python 3.3.2. Hay muchas maneras de lograr esto, aquí está uno de los más cortos, usando solo 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 quiere 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)


Una solución ligeramente más simple:

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


En Python 2:

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

En Python 3:

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


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

Solo 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á a 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).