Question Convertir une chaîne hexadécimale en int en Python


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

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


569
2017-10-16 17:28


origine


Réponses:


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

x = int("deadbeef", 16)

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

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

(Toi doit spécifier 0 comme base pour invoquer ce comportement de devin-devin; omettre le second paramètre signifie supposer base-10.)


821
2017-10-16 17:37



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

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

128
2017-10-16 17:32



Pour toute chaîne donnée s:

int(s, 16)

38
2017-10-16 17:32



Convertir une chaîne hexadécimale en int en Python

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

Pour convertir une chaîne en int, passez la chaîne à int avec la base que vous convertissez.

Les deux chaînes suffiront pour la conversion de cette manière:

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

Location int déduire

Si vous passez 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 n'a pas 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 du code source ou un interpréteur, Python effectuera la conversion pour vous:

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

Cela ne marchera pas avec ffff car Python pense que vous essayez d'écrire un nom Python légitime à la place:

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

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


19
2018-05-14 02:50



Ajout à 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 comme 16 ou il ne pensera pas que vous lui avez donné une valeur valide. La spécification de la base 16 est inutile pour les nombres hexadécimaux non contenus dans les chaînes.

print int(0xdeadbeef) # valid

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

11
2018-06-30 16:25



La pire façon:

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

>>> hex_to_int("c0ffee")
12648430

S'il vous plaît ne faites pas ça!

L'utilisation d'eval en Python est-elle une mauvaise pratique?


3
2018-01-17 13:20



En Python 2.7, int('deadbeef',10) ne semble pas fonctionner.

Les travaux suivants pour moi:

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

1
2018-05-16 00:13



L'option de formatage '% x'% semble également fonctionner pour les instructions d'affectation. (En supposant Python 3.0 et plus tard)

Exemple 

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

1
2018-06-22 11:10