2013-05-24 31 views
7

Dla interfejsu GUI programu TKIN należy odczytać adres szesnastkowy w postaci "0x00", aby ustawić adres I2C. Sposób Jestem obecnie robi to poprzez czytanie wejście jako ciąg, konwersja ciąg do liczby całkowitej, a następnie przekształcenie tego całkowitą do rzeczywistej wartości Hex jak pokazano w kodzie częściowej poniżej:Konwertuj liczbę całkowitą na 2-bajtową wartość heksadecymalną w języku Python

inicjalizacji GUI:

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) 

Następnie wewnątrz funkcji:

addr = self.I2CAddress.get() 
addrint = int(addr, 16) 
addrhex = hex(addrint) 

działa to dla większości wartości, ale moim problemem jest to, że jeśli wprowadzić małą wartość Hex ciąg takie jak „0x01”, konwertuje do prawidłowego całkowitą 1, ale następnie jest konwertowany na wartość szesnastkową 0x1 zamiast 0x01.

Jestem EE i mam bardzo ograniczone doświadczenie w programowaniu, więc każda pomoc jest bardzo ceniona.

Odpowiedz

13

Użyj format() function:

format(addrint, '#04x') 

ta formatuje wartości wejściowej jako ciąg cyfr 2 szesnastkowym z wiodącymi zerami w celu uzupełnienia długość i # zawiera przedrostek „standardowego”, 0x w tym przypadku. Zauważ, że szerokość 4 zawiera ten prefiks. x tworzy ciągi szesnastkowe małych liter; użyj X, jeśli potrzebujesz wielkich liter.

Demo:

>>> for i in range(8, 12): 
...  print format(i, '#04x') 
... 
0x08 
0x09 
0x0a 
0x0b 
+0

Dziękujemy! Pracowałam jak urok, naprawdę to doceniam. –

+0

Odpowiedziałeś tak szybko, że muszę poczekać kilka minut, zanim mi pozwoli, ale absolutnie będę –

+0

Możesz po prostu użyć '{: # 02x}' zamiast jawnego '0x'. '#' Doda "standardowy przedrostek", który dla liczb szesnastkowych jest "0x". (Działa to również w ten sam sposób z% -formatting i C 'printf' i POSIX wiersza polecenia' printf' itp) – abarnert