Question

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

Je peux l'avoir sous la forme "" 0xffff ". ou simplement " ffff ".

Était-ce utile?

La solution

Sans le préfixe 0x, vous devez spécifier explicitement la base, sinon vous ne pouvez pas savoir:

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 invoquer ce comportement consistant à deviner les préfixes; omettre le deuxième paramètre signifie supposer que la base est 10.)

Autres conseils

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

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

Pour toute chaîne donnée s:

int(s, 16)
  

Convertir une chaîne hexagonale en int en Python

     

Je peux l'avoir sous la forme "0xffff" ou simplement "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 manière:

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

Laissant int en 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 ne dispose pas d'assez d'informations pour pouvoir le 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 car Python pensera que vous essayez plutôt d'écrire un nom Python légitime:

>>> 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.

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 attribué une valeur valide. Il est inutile de spécifier la base 16 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

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 dans Python est-elle une mauvaise pratique?

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

ast.literal_eval("0xffff")

Démo:

>>> import ast
>>> ast.literal_eval("0xffff")
65535
>>> 

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

Ce qui suit fonctionne pour moi:

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

L'option de formatage '% x'% semble également fonctionner dans les instructions d'affectation. (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

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.

>>> 0xffff

65535

avec le préfixe '0x', vous pouvez également utiliser la fonction eval

Par exemple

>>a='0xff'
>>eval(a)
255
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top