簡體   English   中英

在python中即時解析二進制串行數據

[英]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 ,可以在上面的數據中看到0x880x00之間為\\x88BM\\x00

我建議只是迭代x的字節數組來進行解析。 不需要編碼和映射。

for b in x:
    if b == 0x4d:
        found_byte1 = True
    ...  # etc

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM