web-dev-qa-db-fra.com

Affiche une variable en hexadécimal en Python

J'essaie de trouver un moyen d'imprimer une chaîne en hexadécimal. Par exemple, j'ai cette chaîne que je convertis ensuite en sa valeur hexadécimale.

my_string = "deadbeef"
my_hex = my_string.decode('hex')

Comment imprimer my_hex En tant que 0xde 0xad 0xbe 0xef?

Pour clarifier ma question ... Disons que j'ai des données comme 0x01, 0x02, 0x03, 0x04 Stockées dans une variable. Maintenant, je dois l'imprimer en hexadécimal pour pouvoir le lire. Je suppose que je cherche un Python équivalent de printf("%02x", my_hex). Je sais qu'il y a print '{0:x}'.format(), mais cela ne fonctionnera pas avec my_hex et il ne remplira pas non plus de zéros.

13
Yaw

Vous voulez dire que vous avez une chaîne de octets dans my_hex Que vous souhaitez imprimer sous forme de nombres hexadécimaux, non? Par exemple, à partir de votre exemple:

>>> my_string = "deadbeef"
>>> my_hex = my_string.decode('hex')  # python 2 only
>>> print my_hex
Þ ­ ¾ ï

Voici une façon de procéder:

>>> print " ".join(hex(ord(n)) for n in my_hex)
0xde 0xad 0xbe 0xef

La compréhension divise la chaîne en octets, ord() convertit chaque octet en l'entier correspondant et hex() formate chaque entier dans le from 0x##. Ensuite, nous ajoutons des espaces entre les deux.

Bonus: si vous utilisez cette méthode avec des chaînes unicode, la compréhension vous donnera des caractères unicode (et non des octets), et vous obtiendrez les valeurs hexadécimales appropriées même si elles sont supérieures à deux chiffres.

20
alexis

Convertissez la chaîne en une base entière 16 puis en hexadécimal.

print hex(int(string, base=16))

Ce sont des fonctions intégrées.

http://docs.python.org/2/library/functions.html#int

Exemple

>>> string = 'AA'
>>> _int = int(string, base=16)
>>> _hex = hex(_int)
>>> print _int
170
>>> print _hex
0xaa
>>> 
4
Matt Campbell

Vous pouvez essayer quelque chose comme ça, je suppose:

new_str = ""
str_value = "rojbasr"
for i in str_value:
    new_str += "0x%s " % (i.encode('hex'))
print new_str

Votre sortie serait quelque chose comme ceci:

0x72 0x6f 0x6a 0x62 0x61 0x73 0x72
1

Une façon qui échouera si votre chaîne d'entrée n'est pas une paire valide de caractères hexadécimaux ...:

>>> import binascii
>>> ' '.join(hex(ord(i)) for i in binascii.unhexlify('deadbeef'))
'0xde 0xad 0xbe 0xef'
1
Jon Clements

Une autre réponse avec un style d'impression/format ultérieur est:

res[0]=12
res[1]=23
print("my num is 0x{0:02x}{1:02x}".format(res[0],res[1]))
1
Kurt Peters

Utilisation

print " ".join("0x%s"%my_string[i:i+2] for i in range(0, len(my_string), 2))

comme ça:

>>> my_string = "deadbeef"
>>> print " ".join("0x%s"%my_string[i:i+2] for i in range(0, len(my_string), 2))
0xde 0xad 0xbe 0xef
>>>

D'un autre côté ... utiliser string comme nom de variable même comme exemple de nom de variable est une très mauvaise pratique.

1
Joran Beasley