IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> python中的struct实现通信协议中的数据打包和解包 -> 正文阅读

[Python知识库]python中的struct实现通信协议中的数据打包和解包

作者:token keyword
**使用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('<i',Data[0])  #一个数据
    # print("数据",data)
    pack = data_tou + data  #起始位加数据位
    Check=sum(pack)       #针对起始位与数据位求和
    # print()
    Check=Check & 0x00FF #与 计算保留后两位
    Check=Check.to_bytes(1,'big') #转化成1个字节16进制和校验位
    pack=pack + Check         #得到带有起始位数据位检验位的数据包
    print(pack)
    
    return 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('<i',pack) #解包得到一个数据
        # return a,b,c,d
        return a

一个简单示例:

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('<i',Data[0])  #一个数据
    # print("数据",data)
    pack = data_tou + data  #起始位加数据位
    Check=sum(pack)       #针对起始位与数据位求和
    # print()
    Check=Check & 0x00FF #与 计算保留后两位
    Check=Check.to_bytes(1,'big') #转化成1个字节16进制和校验位
    pack=pack + Check         #得到带有起始位数据位检验位的数据包
    print(pack)
    
    return pack

# data=bytes(data.data())
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('<i',pack) #解包得到一个数据
        # return a,b,c,d
        return a
# Data = [11.5,12.6,1000.555,1000]
Data = [3]
pack = Pack(Data)#编辑包
pack_1 =bytes([0xa3,0xb4]) + pack#bytes类型
print("数据包",type(pack_1))  
# a,b,c,d=Re_Pack(pack_1)#解包四个数据
# pack_1=pack_1.decode() #直接以默认的utf-8编码解码bytes成string
# pack_1=pack_1.encode() #直接以默认的utf-8编码string为bytes
# pack_1=bytes(pack_1,encoding='utf-8') #再将字符串类型转化为bytes类型
print("编辑包",len(pack_1))
a=Re_Pack(pack_1)#解包一个数据
print(a)
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-10-27 12:47:35  更:2021-10-27 12:48:40 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/30 3:59:16-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码