web-dev-qa-db-fra.com

Convertit une chaîne hexadécimale en entier dans Python

Comment convertir une chaîne hexadécimale en int en Python?

Je peux l'avoir comme "0xffff" ou simplement "ffff".

678
Matt

Sans le préfixe 0x, vous devez spécifier explicitement la base, sinon il n'y a aucun moyen de dire:

x = int("deadbeef", 16)

Avec le préfixe 0x, Python peut distinguer automatiquement les caractères hexadécimal et décimal.

>>> print int("0xdeadbeef", 0)
3735928559
>>> print int("10", 0)
10

(Vous devez spécifier 0 comme base pour appeler ce comportement de préfixe; omettre le deuxième paramètre signifie supposer que la base est 10. .)

965
Dan Lenski

int(hexString, 16) fait l'affaire, et fonctionne avec et sans le préfixe 0x:

>>> int("a", 16)
10
>>> int("0xa",16)
10
144
unwind

Pour toute chaîne donnée s:

int(s, 16)
45
Jorge Ferreira

Convertir une chaîne hexagonale en int en Python

Je peux l'avoir comme "0xffff" ou juste "ffff".

Pour convertir une chaîne en un entier, transmettez-la à int avec la base à partir de laquelle vous effectuez la conversion.

Les deux chaînes suffiront pour la conversion de cette façon:

>>> string_1 = "0xffff"
>>> string_2 = "ffff"
>>> int(string_1, 16)
65535
>>> int(string_2, 16)
65535

Laisser int inférer

Si vous donnez 0 comme base, int déduira la base du préfixe de la chaîne.

>>> int(string_1, 0)
65535

Sans le préfixe hexadécimal, 0x, int ne dispose pas d'assez d'informations pour deviner:

>>> int(string_2, 0)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 0: 'ffff'

littéraux:

Si vous tapez dans le code source ou un interpréteur, Python effectuera la conversion pour vous:

>>> integer = 0xffff
>>> integer
65535

Cela ne fonctionnera pas avec ffff parce que Python pensera que vous essayez d'écrire un nom légitime Python:

>>> integer = ffff
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'ffff' is not defined

Les numéros Python commencent par un caractère numérique, tandis que les noms Python ne peuvent pas commencer par un caractère numérique.

34
Aaron Hall

Ajoutant à la réponse de Dan ci-dessus: si vous fournissez la fonction int () avec une chaîne hexadécimale, vous devrez spécifier la base à 16 ou il ne pensera pas que vous lui avez attribué une valeur valide. Spécifier la base 16 n'est pas nécessaire pour les nombres hexadécimaux non contenus dans des chaînes.

print int(0xdeadbeef) # valid

myHex = "0xdeadbeef"
print int(myHex) # invalid, raises ValueError
print int(myHex , 16) # valid
12
Max

Le pire moyen:

>>> def hex_to_int(x):
    return eval("0x" + x)

>>> hex_to_int("c0ffee")
12648430

S'il vous plaît ne faites pas cela!

L'utilisation de eval dans Python est-elle une mauvaise pratique?

4
André Laszlo

Ou ast.literal_eval (c'est sûr, contrairement à eval):

ast.literal_eval("0xffff")

démo:

>>> import ast
>>> ast.literal_eval("0xffff")
65535
>>> 
3
U10-Forward

Dans Python2.7, int('deadbeef',10) ne semble pas fonctionner.

Ce qui suit fonctionne pour moi:

>>a = int('deadbeef',16)
>>float(a)
3735928559.0
1
Avi2503

L'option de formatage '% x'% semble également fonctionner dans les instructions d'affectation pour moi. (En supposant que Python 3.0 et versions ultérieures)

Exemple

a = int('0x100', 16)
print(a)   #256
print('%x' % a) #100
b = a
print(b) #256
c = '%x' % a
print(c) #100
1
Soundararajan

Si vous utilisez l'interprète python, vous pouvez simplement taper 0x (votre valeur hexadécimale) et l'interpréteur le convertira automatiquement pour vous.

>>> 0xffff

65535
0
Maysara Alhindi