2013-06-22 2 views
2

직렬 포트에서받은 데이터를 테스트하려고하는데 제대로 된 것처럼 보이지 않습니다. 나는 패킷에받은 첫 번째 바이트 따라서 0xBE 있는지 확인해야합니다직렬 포트에서 테스팅 바이트

#ser is instance of pyserial serial object 
data=ser.read(5) 
print "serial RX: " + binascii.b2a_hex(data) 
if data[0] != 0xBE: 
    print"wrong value" 

항상 인쇄 : 인쇄를 ASCII로 바이너리가 올바른 값이 수신 된 것을 알 수

serial RX: beef000008 
wrong value 

에도 불구하고.

어디에서이 기본적인 작업을 잘못하고 있습니까?

감사합니다. 로빈. pyserial's documentation에서

+0

왜 데이터 [0], 데이터 [1], 데이터 [2] 및 데이터 [3]를 인쇄하고 거기에 무엇이 있는지 확인하지 않으시겠습니까? –

+0

만약 데이터를 인쇄하면 [0] 나는 chr (0xBE) 인 3/4 문자를 가지므로 올바른 값 (bin2ascii에 의해 확인 됨)이지만 serial.read()는 바이트 객체를 파이썬> = 2.4로 반환해야합니다 문서에 따르면. 아마 진짜 문자열일까요? – user2512377

+0

바이트는 일종의 문자열이라고 생각합니다. 그냥 지금 그것에 대해 읽고. 하지만 어떤 경우에는 상황에 맞는 해결 방법은 데이터 [0]과 chr (0xbe)를 비교하는 것입니다. –

답변

3

:

>> bytes(0xbe) == 0xbe 
False 

을하지만 당신은 변환 경우는 int로 :

Changed in version 2.5: Returns an instance of bytes when available (Python 2.6 and newer) and str otherwise. 

그래서 시험이 stackoverflow question 쇼 등

>> int(bytes(0xbe)) == 0xbe 
True 

bytes 유형이 포함되어 있습니다 [PEP-3137 3]. python3의 경우 bytearray과 비슷하지만 str의 별칭은 python2입니다.

기본적으로 pyserial의 출력을 str으로 처리하는 동안 python2 코드를 수행합니다.

관련 문제