栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python中的struct实现通信协议中的数据打包和解包

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python中的struct实现通信协议中的数据打包和解包

**使用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('
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/350531.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号