2021-11-14 struct 的记录,对microPython尤其有用

首先,玩硬件离不开二进制,无论使用多高级的语言,最后都要回到二进制的各种通信,那么作为MICROPYTHON 这种高级的多的语言在这个位置就有些尴尬,相信很对学过标准PYTHON甚至干过Python开发的都很可能没接触过,也不会二进制的传输。所以本次记录是struct在MICROPYTHON里的应用,平台是ESP32

此方法适用于各种二进制编码规则通信,以及二进制字符串拼接等领域尤其有用于PLC和单片机485通信范围

首先要引用 import struct

struct

pack(A,*B)
A:是一个字符串,但是它代表输出的格式
B:是一堆参数代表要处理的内容

这玩意 pack()是打包  unpack()解包
struct.pack(‘BBB’,1,2,3)#这个	B对应每一个数字3个数字三个B
=>b'\x01\x02\x03'
ct.unpack('bbb',b'\x01\x03\x05')#可以直接把流数据解析出元祖来
=>(1, 3, 5)
aa=b'\xaa\xf9\xce\x04Q\x0f\xf2U'
struct.unpack('8B',aa)#字母前的数字表示几个字母,
等价于八个B==>struct.unpack(‘bbbbbbbb’,aa)
=>(170, 249, 206, 4, 81, 15, 242, 85)
通过B H 组合能解析数据。顺便都能算出来  都不用移位计算了

这里有个注意事项:

关于pack(’>BBB’,1,2,3)的

b=struct.pack(‘BBB’,1,2,3) #这样是OK的
如果: 
a=(1,2,3)
b=struct.pack(‘BBB’,a)  #这样是不行的,因为它弄不聊元祖和列表所以要加个星号的写法解包
b=struct.pack(‘BBB’,*a) #这样是可以了

一年后的补充,

可以解析浮点数比如  
cc=struct.unpack('>f',b'\x3f\x9e\x04\x19')  
#单精度浮点数用f ,四个字节一个数字,前面加个> 表示大端 
结果:(1.2345,)  
这个配合485通信可以直接传输小数,尤其是淘宝上的485数码管基本就可以直接用这玩意传输直接显示。

下面是
在这里插入图片描述

大端高位在左 人类喜欢
小端高位在右 计算机喜欢
在这里插入图片描述

在这里插入图片描述

补充一个二进制拼接内容:

二进制数据

data1 = b'/xa2'
data2 = b'/xe2'
#如果这两个数据合在一起是一个汉子就必须拼接在一起那么就用STRUCT
#首先把他俩加到一个列表里
a=[data1,data2]
#加到列表里是因为二进制一般数据非常多,都是列表处理的,演示数据虽然少但也用列表吧
counts=struct.pack('2b',*a) #二进制不能拼接,采用封包模式,记得有星号
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值