python从串口接收到数据后解析

python从串口接收到数据后解析
python从串口接收数据,数据长度固定
数据示例如下02 24 30 20 30 30 31 31 32 39 30 30 30 30 31 30 0D
接收到的是16进制ascii码
请问如何将粗体部分的数据解析成一个数。(接收到数据的第11位到第16位)
30 30 30 30 31 30
分别对应0-0-0-0-1-0,分别对应十万,万,千,百,十,个
解析到的就是10
目前代码如下
用chr转换data[10],直接转换失败。求解

import serial
from time import sleep

def recv(serial):
    while True:
        data = serial.read_all().decode()  # str
        if data == '':
            continue
        else:
            break
        sleep(2.1)
    return data

if __name__ == '__main__':
    serial = serial.Serial('COM19', 9600, timeout=10)
    if serial.isOpen():
        print("serial open success")
    else:
        print("serial open failed")
    while True:
        data = recv(serial)
        print(data)  # str

16进制的ascii转换成10进制数字可以使用python的内置函数 int(x, 16) x为16进制的ascii字符,16表示16进制,返回10进制数字。示例: int('30',16) 返回48 所以上面的可以写成如下代码: data="02 24 30 20 30 30 31 31 32 39 30 30 30 30 31 30 0D" first_num = data[10:12] # "30" second_num = data[12:14] # "30" third_num = data[14:16] # "30" fourth_num = data[16:18] # "30" fifth_num = data[18:20] # "31" sixth_num = data[20:22] # "30" num=int(first_num, 16)*100000+int(second_num, 16)*10000+int(third_num, 16)*1000+ int(fourth_num, 16)*100+int(fifth_num, 16)*10+int(sixth_num, 16) num=int(num) print(num) # 10

可以使用Python中的字符串切片来获取需要解析的数据。先将接收到的数据转换成字符串类型,然后使用切片操作获取需要的数据,并将其转换为十进制整数类型。

以下是一个可能的解决方案:

import serial
from time import sleep

def recv(serial):
    while True:
        data = serial.read_all().decode()  # str
        if data == '':
            continue
        else:
            break
        sleep(2.1)
    return data

if __name__ == '__main__':
    serial = serial.Serial('COM19', 9600, timeout=10)
    if serial.isOpen():
        print("serial open success")
    else:
        print("serial open failed")
    while True:
        data = recv(serial)
        print(data)  # str

        # 解析数据
        hex_str = data[10:16]  # 获取需要解析的数据部分,即16进制的'303030303130'
        dec_num = int(hex_str, 16)  # 将16进制字符串转换为10进制整数
        print('解析出的数值为:', dec_num)


这个代码片段使用切片操作从接收到的数据中获取了需要解析的16进制数值,然后将其转换为10进制整数类型。你可以根据自己的需求调整和优化这个代码。