Comment puis-je convertir un hexagone en ASCII en Python ?
Notez que, par exemple, je veux convertir "0x7061756c" en "paul".
Comment puis-je convertir un hexagone en ASCII en Python ?
Notez que, par exemple, je veux convertir "0x7061756c" en "paul".
Vous pouvez aussi le faire...
Interpréteur Python 2
print "\x70 \x61 \x75 \x6c"
Exemple
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:~#
ou
Python 2 One-Liner
python -c 'print "\x70 \x61 \x75 \x6c"'
Exemple
user@linux:~# python -c 'print "\x70 \x61 \x75 \x6c"'
p a u l
user@linux:~#
Interpréteur Python 3
user@linux:~$ python3
Python 3.6.9 (default, Apr 18 2020, 01:56:04)
[GCC 8.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> print("\x70 \x61 \x75 \x6c")
p a u l
>>> print("\x70\x61\x75\x6c")
paul
Python 3 One-Liner
python -c 'print("\x70 \x61 \x75 \x6c")'
Exemple
user@linux:~$ python -c 'print("\x70 \x61 \x75 \x6c")'
p a u l
user@linux:~$ python -c 'print("\x70\x61\x75\x6c")'
paul
Voici ma solution lorsque je travaille avec des entiers hexagonaux et non des chaînes 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)
Testé en Python 3.3.2 Il existe de nombreuses façons d'accomplir cette tâche, voici l'une des plus courtes, qui n'utilise que des éléments fournis par Python :
import base64
hex_data ='57696C6C20796F7520636F6E76657274207468697320484558205468696E6720696E746F20415343494920666F72206D653F2E202E202E202E506C656565656173652E2E2E212121'
ascii_string = str(base64.b16decode(hex_data))[2:-1]
print (ascii_string)
Bien sûr, si vous ne voulez rien importer, vous pouvez toujours écrire votre propre code. Quelque chose de très basique comme ceci :
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)
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
0 votes
J'ai essayé un tas de trucs que j'ai trouvés ici : docs.python.org/library/binascii.html
2 votes
Avec l'aide du lien que vous venez de nous donner, j'ai trouvé la fonction que vous recherchiez. Qu'est-ce que exactement avez-vous essayé et pourquoi cela n'a-t-il pas fonctionné ?
1 votes
J'ai essayé ce qui suit : >>> binascii.b2a_hqx("0x7061756c") '-(Jh-$Ba0c8fB`' >>> binascii.b2a_uu("0x7061756c") '*,'@W,#8Q-S4V8P \n " >>> binascii.b2a_base64("0x7061756c") 'MHg3MDYxNzU2Yw== \n ' >>> binascii.b2a_qp("0x7061756c") '0x7061756c' >>> binascii.b2a_hex("0x7061756c") '30783730363137353663' >>> binascii.b2a_hex(0x7061756c) Traceback (dernier appel le plus récent) : Fichier "<stdin>", ligne 1, dans <module> TypeError : must be string or buffer, not int >>>
0 votes
Aucun d'entre eux n'a fonctionné, car aucun n'a retourné 'paul'.
2 votes
Vous ne voulez pas dire ASCII "7 bits" ? (Ce qui est un peu idiot car l'ASCII n'est que de 7 bits.) Un GUID est de 128 bits...