**使用python中的struct实现通信协议中的数据打包和解包** struct介绍可参见其他博客。
使用struct结构体首先导入该模块:
import struct
数据打包程序如下:
def Pack(Data):
# x=x + 1
data_tou=bytes([0xac])
# data=struct.pack('<4f',Data[0],Data[1],Data[2],Data[3]) #四个数据类型
data=struct.pack('
数据解包程序如下:
def Re_Pack(data): #解包
if len(data)>5:
# print("hello")
header=b'xac'#设置头:起始位
# print(header)
pos=data.find(header)#得到头位置
# print(pos)
# Pack=data[pos:pos+17]#得到校验位前面的所有字节:起始位和数据位
# jiaoyan=data[pos+17:pos+18]#得到校验位的一个字节
Pack=data[pos:pos+5]#得到校验位前面的所有字节:起始位和数据位 一个字符
# print("测试",Pack)
jiaoyan=data[pos+5:pos+6]#得到校验位的一个字节
check=sum(Pack)#和计算
check=check & 0x00FF
check=check.to_bytes(1,'big')
if check==jiaoyan:
# pack=data[pos+1:pos+17]#得到数据位
pack=data[pos+1:pos+5]#得到数据位 一个数据
# print("解包",pack)
# a,b,c,d=struct.unpack('<4f',pack) #解包得到四个数据
a=struct.unpack('
一个简单示例:
Data = [3]
pack = Pack(Data)#编辑包
pack_1 =bytes([0xa3,0xb4]) + pack#bytes类型
print("数据包",type(pack_1))
print("编辑包",len(pack_1))
a=Re_Pack(pack_1)#解包一个数据
print(a)
如下代码为整体程序,复制可直线运行
# -*- coding: utf-8 -*-
"""
@author: Liu Jie
"""
import struct
def Pack(Data):
# x=x + 1
data_tou=bytes([0xac])
# data=struct.pack('<4f',Data[0],Data[1],Data[2],Data[3]) #四个数据类型
data=struct.pack('5:
# print("hello")
header=b'xac'#设置头:起始位
# print(header)
pos=data.find(header)#得到头位置
# print(pos)
# Pack=data[pos:pos+17]#得到校验位前面的所有字节:起始位和数据位
# jiaoyan=data[pos+17:pos+18]#得到校验位的一个字节
Pack=data[pos:pos+5]#得到校验位前面的所有字节:起始位和数据位 一个字符
# print("测试",Pack)
jiaoyan=data[pos+5:pos+6]#得到校验位的一个字节
check=sum(Pack)#和计算
check=check & 0x00FF
check=check.to_bytes(1,'big')
if check==jiaoyan:
# pack=data[pos+1:pos+17]#得到数据位
pack=data[pos+1:pos+5]#得到数据位 一个数据
# print("解包",pack)
# a,b,c,d=struct.unpack('<4f',pack) #解包得到四个数据
a=struct.unpack('


