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).