Convertir un entier de 2 octets valeur Hexadécimale en Python
Pour une interface graphique tkinter, je dois lire dans un Hex adresse sous la forme de "0x00" pour définir une adresse I2C. La façon dont je suis en train de faire c'est par la lecture de l'entrée comme une chaîne de caractères, la conversion de la chaîne en un nombre entier, puis de les convertir ce nombre entier à une valeur Hexadécimale, comme indiqué dans la partielle de code ci-dessous:
GUI initialisation:
self.I2CAddress=StringVar()
self.I2CAddress.set("0x00") #Sets Default value of '0x00'
Label(frame, text="Address: ").grid(row=5, column=4)
Entry(frame, textvariable=self.I2CAddress).grid(row=5, column=5)
Puis à l'intérieur de la fonction:
addr = self.I2CAddress.get()
addrint = int(addr, 16)
addrhex = hex(addrint)
Cela fonctionne pour la plupart des valeurs, mais mon problème est que si je entrer une petite Hex chaîne de valeur tels que "0x01", il convertit à la bon nombre entier de 1, mais alors qui est convertie en Hexadécimal valeur de 0 x 1 au lieu de 0x01.
Je suis un EE et ont très peu d'expérience de la programmation, de sorte que toute aide est grandement appréciée.
OriginalL'auteur Brett Prudhom | 2013-05-24
Vous devez vous connecter pour publier un commentaire.
Utiliser le
format()
function:Cette formats de la valeur d'entrée de 2 chiffres hexadécimaux chaîne de zéros à faire jusqu'à la longueur, et
#
compris le préfixe standard',0x
dans ce cas. Notez que la largeur de 4 qui comprend le préfixe.x
produit bas-de-casse hex chaînes; utilisationX
si vous avez besoin d'une majuscule.Démo:
Vous avez répondu si rapidement, je dois attendre quelques minutes avant qu'il me permet, mais je ne peut absolument
Vous pouvez simplement utiliser
{:#02x}
au lieu de l'explicite0x
. Le#
ajoutera le "préfixe standard", qui, pour les nombres hexadécimaux est0x
. (Cela fonctionne aussi de la même façon avec %de mise en forme, et Cprintf
, et POSIX ligne de commandeprintf
, etc.)Cool, j'ai été pas conscients de la
#
préfixe option.Avec le
#
préfixe que vous pouvez simplement utiliser leformat()
de la fonction et de passer complètement la chaîne de création de modèles tout à fait.OriginalL'auteur Martijn Pieters