Konvertieren einer Ganzzahl in eine 2-byte-Hex-Wert in Python
Für eine tkinter-GUI, die ich Lesen muss, in eine Hex-Adresse in der form '0x00' zu setzen, ein I2C-Adresse. Die Art, wie ich momentan bin, es zu tun ist durch das Lesen der Eingabe als einen string, wandelt den string in einen integer, dann die Umwandlung von Ganzzahl zu einer tatsächlichen Hex-Wert, wie gezeigt, in der teilweisen folgenden code:
GUI Initialisierung:
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)
Dann innerhalb der Funktion:
addr = self.I2CAddress.get()
addrint = int(addr, 16)
addrhex = hex(addrint)
Diese funktioniert bei den meisten Werten, aber mein Problem ist, dass wenn ich geben Sie eine kleine Hex-Wert string wie '0x01', er wandelt auf dem richtigen Ganzzahl von 1, das ist dann aber umgewandelt in einen Hex-Wert von 0 x 1 anstelle von 0x01.
Ich bin ein EE und haben sehr wenig Programmier-Erfahrung, so dass jede Hilfe wird sehr geschätzt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden Sie die
format()
- Funktion:Diese Formate der input-Wert einer 2-stelligen hexadezimalen string mit führenden Nullen um die Länge, und
#
umfasst die "standard-Präfix',0x
in diesem Fall. Beachten Sie, dass die Breite von 4 umfasst, die mit einem Präfix.x
produziert-und Kleinschreibung der hex-strings; verwendenX
wenn Sie müssen Großbuchstaben.Demo:
{:#02x}
statt der expliziten0x
. Die#
add "standard-Präfix", das für hex-zahlen ist0x
. (Auch dies funktioniert auf die gleiche Weise mit der %-Formatierung, und Cprintf
- und POSIX-Kommando-Zeileprintf
usw.)#
Präfix-option.#
beseitigt die führenden Nullen wieder. Für mich sieht das aus wie ein bug, scheint es, als ob die Breite ist ganz und gar ignoriert.{:#04x}
. Immer, wenn ich eigentlich mit dem schreiben von code (in C oder Python), die ich Schreibe, 10, 6, oder 4 ohne zu denken, aber Wann immer ich erkläre es jemand anderes, ich sagen Sie Ihnen, zu verwenden, 8, 4 oder 2, und laufen Sie in das genaue die gleiche Sache, die Sie haben. Sie würden denken, dass ich lernen würde einer von diesen Jahrzehnten...#
Präfix, können Sie einfach dieformat()
Funktion und ganz ohne die string-Template zusammen.