**使用python中的struct实现通信协议中的数据打包和解包**
struct介绍可参见其他博客。
使用struct结构体首先导入该模块:
import struct
数据打包程序如下:
def Pack(Data):
data_tou=bytes([0xac])
data=struct.pack('<i',Data[0])
pack = data_tou + data
Check=sum(pack)
Check=Check & 0x00FF
Check=Check.to_bytes(1,'big')
pack=pack + Check
print(pack)
return pack
数据解包程序如下:
def Re_Pack(data):
if len(data)>5:
header=b'\xac'
pos=data.find(header)
Pack=data[pos:pos+5]
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+5]
a=struct.unpack('<i',pack)
return a
一个简单示例:
Data = [3]
pack = Pack(Data)
pack_1 =bytes([0xa3,0xb4]) + pack
print("数据包",type(pack_1))
print("编辑包",len(pack_1))
a=Re_Pack(pack_1)
print(a)
如下代码为整体程序,复制可直线运行
"""
@author: Liu Jie
"""
import struct
def Pack(Data):
data_tou=bytes([0xac])
data=struct.pack('<i',Data[0])
pack = data_tou + data
Check=sum(pack)
Check=Check & 0x00FF
Check=Check.to_bytes(1,'big')
pack=pack + Check
print(pack)
return pack
def Re_Pack(data):
if len(data)>5:
header=b'\xac'
pos=data.find(header)
Pack=data[pos:pos+5]
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+5]
a=struct.unpack('<i',pack)
return a
Data = [3]
pack = Pack(Data)
pack_1 =bytes([0xa3,0xb4]) + pack
print("数据包",type(pack_1))
print("编辑包",len(pack_1))
a=Re_Pack(pack_1)
print(a)
|