2014-10-18 5 views
2

다음 코드를 작성하여 Raspberry PI의 직렬 포트를 통해 데이터를 보내고받습니다.16 진수 문자열을 정수로 변환하는 방법은 무엇입니까?

ValueError: invalid literal for int() with base 16: '\xaa\x00\x02\x01\x83\x80\xbb' 

가 어떻게 정수이 16 진수 문자열로 변환 않습니다

import serial 
serial=serial.Serial("dev/ttyAMA0", 
       baudrate=9600, 
       stopbits=serial.STOPBITS_ONE, 
       parity=serial.PARITY_NONE, 
       bytesize=serial.EIGHTBITS, 
       timeout=0.5) 

chuoi="\xAA\xOO\x03\x25\x26\x00\x00\xBB" 
while 1: 
    serial.write(chuoi) 
    data=serial.readline() 
    print int(data,16) 

나는 다음과 같은 오류가?

답변

4

가지고있는 값은 16 진수가 아닌 바이트 문자열입니다. 이것을 16 진수로 인코딩 한 다음 16 진수로 해석 할 수 있습니다. 반환 값이 하나의 숫자로 해석되고 리틀 엔디안 대 빅 엔디안과 같은 형식에 대해 알지 못하는 것으로 가정하고 \xoo\x00의 오타라고 가정합니다.

from binascii import hexlify 

data = serial.readline() 
hex = hexlify(data) 
num = int(hex, 16) 

print(num) 
0

문자열 chuoi의 두 번째 바이트는 \xOO입니다.이 숫자는 0이 아닌 O 문자로 구성됩니다. 오류가 발생합니다.

+0

'int()'에 대한 잘못된 리터럴이 발생하지 않으면 'ValueError : invalid \ x escape'가 발생합니다. 그 질문에 오타가 될 수도 있습니다. – davidism

+0

오, 죄송합니다. 오류는 입력했으나 코드는 true \ x00 " –

관련 문제