Python 串口数据打包与解析

本文介绍了如何使用Python将用户输入的字符串转换为字节流,通过`bytes()`和`struct.pack()`实现数据打包,同时解析接收的字节流,包括逐字节存储和struct.unpack()的运用。适合处理串口通信中数据格式转换和解析问题。
摘要由CSDN通过智能技术生成

Python 串口数据打包与解析

介绍

通常用python写好上位机要与板子通过串口通信的时候(比如命令,参数等),对于这之间的数据格式转换是有特定要求的,比如上位机到板子之间是以字节流进行数据传输,而用户输入到上位机的数据通常是字符串;当接收数据时,又需要将字节流进行相应格式的组合解析。

从字符串到字节流

法1:使用bytes(arg)函数,因为参数arg需要时列表[ ]类型,所以需要将传入的数据进行转换,直接上代码,如下:
在这里插入图片描述
解析:

  • input():获取用户输入的参数,不过此时是字符串的格式
  • split() :以空格为间隔,对该字符串进行分割,转成了列表类型,不过内容都是字符串
  • int() :利用int()函数将list列表里的内容转为整型
  • bytes() :此函数可以直接将内容转化为字节流的类型,这样就可以使用python的serial.write发送数据

法2:使用python的库struct,具有打包和解包的功能,代码如下
在这里插入图片描述
struct.pack(fmt,arg1,arg2,),在传入有限个参数(命令,地址,数据长度)进行打包是很好用的,包括对字节流的解析也会用到它关于它的使用建议好好看看,可以参考这个python struct详解

以上介绍了两种方法,优缺点如下,二者可以混合使用,以求到达最好效果
在这里插入图片描述

对字节流的解析

接收串口发来的数据时,一般时一个字节一个字节传来的,我们可以每读取一个字节就将其存入一个列表中,格式类似如下:
在这里插入图片描述
注意:列表里面都是bytes对象,为了将其解析,需要先转换为int型
data = int.frombytes(m[0] , ‘big’)
关于int.frombytes()函数的用法可以去查查,作用就是将一个bytes类型的数据转换为int类型

转换后的m如下:
在这里插入图片描述
因为struct.unpack()函数是针对字节流处理的,故需要将m由一个列表类型转换为字节流
在这里插入图片描述
就能用struct.unpack对字节流按照用户设定的格式进行解析,如下
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值