2013-05-24 8 views
7

tkinter GUI의 경우 I2C 주소를 설정하려면 16 진수 주소를 '0x00'형식으로 읽어야합니다.파이썬에서 정수를 2 바이트 16 진수 값으로 변환

GUI 초기화 :

I은 ​​그 일을하고있는 방법은 아래 부분의 코드에 도시 ​​된 바와 같이, 그 다음 실제 진수 값이 정수 변환, 문자열을 정수로 변환하는 문자열로 입력을 읽는 것이다 그런 다음 함수 내에서
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) 

:

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

이 대부분의 값을 작동하지만, 내 문제는 내가 같은 '0x01로'로 작은 16 진수 값 문자열을 입력하면, 그것은 하나의 적절한 정수로 변환되는 것입니다, 그러나 0x01 대신 0x1의 Hex 값으로 변환됩니다.

본인은 EE이며 프로그래밍 경험이 매우 제한되어 있으므로 도움을 주시면 대단히 감사하겠습니다.

답변

13

사용 format() function는 :

format(addrint, '#04x') 

이 길이를 만들 수 0이 붙는 2 자리의 16 진수 문자열로 입력 값을 포맷하고, #이 경우의 '표준 접두사', 0x이 포함되어 있습니다. 너비 4에는 해당 접두어가 포함됩니다. x은 소문자의 16 진수 문자열을 생성합니다. 대문자가 필요하면 X을 사용하십시오.

데모 :

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

감사합니다! 참으로 매력적이었습니다. 정말 고마워요. –

+0

너무 빨리 대답했기 때문에 몇 분 정도 기다려야 만합니다. 그러나 나는 절대적으로 대답 할 것입니다. –

+0

명백한'0x' 대신'{: # 02x}'를 사용할 수 있습니다. '#'은 "표준 접두사"를 추가합니다. 16 진수의 경우 "0x"입니다. (이것도 % -formatting, C'printf', POSIX 명령 행'printf' 등과 같은 방식으로 작동합니다.) – abarnert

관련 문제