文名 2023-03-28 16:35 采纳率: 75%
浏览 35
已结题

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

  • 写回答

2条回答 默认 最新

  • apples_kk 2023-03-28 17:25
    关注
    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
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月8日
  • 已采纳回答 3月31日
  • 修改了问题 3月28日
  • 创建了问题 3月28日

悬赏问题

  • ¥15 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图