簡體   English   中英

如何解碼 python 中的 HEX 和 ASCII 數據?

[英]How to decode HEX and ASCII data in python?

import serial
from time import sleep

t = serial.Serial(
    "/dev/serial0", 19200, parity=serial.PARITY_EVEN,
    stopbits=serial.STOPBITES_ONE, timeout=0.5
)
cw = [0x01, 0x03, 0x00, 0x00, 0x03, 0x05, 0xCB]
t.write(serial.to_bytes(cw))
rx = t.read()
sleep(0.03)
data = t.inWaiting()
rx += t.read(rx)
print(rx)

這是我正在使用的代碼, rx的 output 是b'\x01\x03\x06\x00\x07\x01,\x00\x00T\x80'

解碼格式為 01 03 06 + 電壓高字節 + 電壓低字節 + 電流高字節 + 電流低字節 + 狀態高 + 低 + crc + 奇偶校驗。

如何解碼電壓和電流? 我認為它是十六進制和ASCII格式。

根據使用的上下文,有幾種方法可以做到這一點。有 Python結構庫和from_bytes int class 方法。

數據采用小端格式,因為高字節在低字節之前。 我還假設這些值可以簽名。

如何執行此操作的示例:

>>> rx = b'\x01\x03\x06\x00\x07\x01,\x00\x00T\x80'
>>> import struct
>>> voltage, current = struct.unpack('<3xhh4x', rx)
>>> print(voltage)
1792
>>> print(current)
11265
>>> voltage2 = int.from_bytes(rx[3:5], 'little', signed=True)
>>> current2 = int.from_bytes(rx[5:7], 'little', signed=True)
>>> print(voltage2)
1792
>>> print(current2)
11265

查看這些值,如果您期望大約 18 伏,這些值可能需要將小數點移動幾位。 例如

>>> voltage * 10**-2
17.92

暫無
暫無

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

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