2013-06-22 74 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" 

始終打印:

serial RX: beef000008 
wrong value 

即使以ASCII打印二進制顯示正確的值已收到。

我在哪裏錯了這個真正的基本任務?

謝謝, 羅賓。

+0

那麼爲什麼你不打印出數據[0],數據[1],數據[2]和數據[3],看看有什麼? –

+0

如果我打印數據[0]我得到一個3/4字符是chr(0xBE),所以它是正確的值(也由bin2ascii確認),但serial.read()應該返回一個字節對象在python> = 2.4根據文檔。這真的是一個字符串嗎? – user2512377

+0

我認爲字節是一些字符串。現在就閱讀它。但在任何情況下,你的情況的解決方案是比較數據[0]和字符串(0xbe),然後:) –

回答

3

pyserial's documentation

​​

所以我測試:

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

,但如果你將其轉換爲int:

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

,因爲這stackoverflow question所示,bytes類型包括通過[PEP-3137 3]。它就像是python3的bytearray,但python2str只是一個別名。

所以,基本上,只要在python2代碼中將pyserial的輸出作爲str即可。