[英]on-the-fly parsing of binary serial data in python
我是使用Python3進行數據采集的新手。 我正試圖找到一種方法來解析Linux上串行端口的二進制數據。
import serial
ser = serial.Serial(
port='/dev/ttyS0',
baudrate = 9600,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,
bytesize=serial.EIGHTBITS,
timeout=1)
counter = 0
while 1:
x = ser.read(31)
print (x)
這給了我一個字符串,我不確定格式:
x='\x00\x00\x91\x00\x02\x88BM\x00\x1c\x00\x00\x00\x01\x00\x01\x00\x00\x00\x01\x00\x01\x00\xe1\x00K\x00\x1a\x00\x02\x00\x00'
運用
x.encode('hex')
給出一串十六進制值
x='000091000288**424d**001c00000001000100000001000100e1004b001a00020000'
其中0x42
是消息的結尾, 0x4d
是消息的開頭。
我可以使用它將其轉換為基數10列表
y = map(ord,x)
print(y)
然后我有辦法使用索引重新排序消息,但肯定有一個更簡潔的方式? 如何創建一個從0x4d
開始解析的列表?
如果你使用python3,這可能已經是字節:
x='\x00\x00\x91\x00\x02\x88BM\x00\x1c\x00\x00\x00\x01\x00\x01\x00\x00\x00\x01\x00\x01\x00\xe1\x00K\x00\x1a\x00\x02\x00\x00'
它可能看起來像這樣,因為Python為你打印它,所有非ascii字符都以十六進制顯示。 您的消息開頭是0x42, 0x4d
,它是ascii中的BM
,可以在上面的數據中看到0x88
和0x00
之間為\\x88BM\\x00
。
我建議只是迭代x
的字節數組來進行解析。 不需要編碼和映射。
for b in x:
if b == 0x4d:
found_byte1 = True
... # etc
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.