Comment convertir une chaîne hexadécimale en int en Python?
Je peux l'avoir comme " 0xffff
" ou simplement " ffff
".
Sans le préfixe 0x, vous devez spécifier la base explicitement, sinon il n'y a aucun moyen de dire:
x = int("deadbeef", 16)
Avec le préfixe 0x, Python peut distinguer automatiquement hexadécimal et décimal.
>>> print int("0xdeadbeef", 0)
3735928559
>>> print int("10", 0)
10
(Vous devez spécifier 0
comme base pour invoquer ce comportement de préfixation; l'omission du deuxième paramètre signifie assumer la base-10.)
int("FFFF",16)
être converti en -1.int(hexString, 16)
fait l'affaire et fonctionne avec et sans le préfixe 0x:la source
Pour toute chaîne donnée s:
la source
Pour convertir une chaîne en entier, transmettez-la
int
avec la base à partir de laquelle vous effectuez la conversion.Les deux chaînes suffiront pour la conversion de cette manière:
Laisser
int
inférerSi vous passez 0 comme base,
int
déduira la base du préfixe dans la chaîne.Sans le préfixe hexadécimal,
0x
,int
ne dispose pas assez d' informations avec lesquelles deviner:littéraux:
Si vous saisissez du code source ou un interpréteur, Python effectuera la conversion pour vous:
Cela ne fonctionnera pas
ffff
car Python pensera que vous essayez d'écrire un nom Python légitime à la place: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.
la source
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 à 16 ou il ne pensera pas que vous lui avez donné une valeur valide. Il n'est pas nécessaire de spécifier la base 16 pour les nombres hexadécimaux non contenus dans les chaînes.
la source
La pire façon:
Veuillez ne pas faire ça!
L'utilisation d'eval en Python est-elle une mauvaise pratique?
la source
eval
est également absurdement lent, en plus de tous les autres problèmes.int(s,16)
retour de valeurs incorrectes, provoquant des problèmes majeurs avec mon runtime (int(hex(value),16) == int(value) >>> False
). la chaîne fournie àeval()
était sûre et la valeur renvoyée était correcte.Ou
ast.literal_eval
(c'est sûr, contrairementeval
):Démo:
la source
L'option de formatage '% x'% semble également fonctionner dans les instructions d'affectation. (En supposant Python 3.0 et versions ultérieures)
Exemple
la source
print(b)
produira256
, non100
etprint(c)
produira100
, non256
. Notez également qu'ilc
s'agit d'une chaîne, mais cea
n'est pas le cas, votre réponse convertit en fait un entier en chaîne, et non l'inverse (c'est de cela qu'il s'agit).Si vous utilisez l'interpréteur python, vous pouvez simplement taper 0x (votre valeur hexadécimale) et l'interpréteur le convertira automatiquement pour vous.
la source
Gère hex, octal, binaire, int et flottant
En utilisant les préfixes standard (c'est-à-dire 0x, 0b, 0 et 0o), cette fonction convertira toute chaîne appropriée en nombre. J'ai répondu à ceci ici: https://stackoverflow.com/a/58997070/2464381 mais voici la fonction nécessaire.
la source
En Python 2.7,
int('deadbeef',10)
ne semble pas fonctionner.Ce qui suit fonctionne pour moi:
la source
avec le préfixe «0x», vous pouvez également utiliser la fonction eval
Par exemple
la source
ast.literal_eval
.