首页 > 编程语言 >Python模块之struct

Python模块之struct

时间:2023-04-28 19:46:52浏览次数:171  
标签:格式化 struct Python print 模块 字符串 data pack

0 背景

在工作中,有些二进制文件,是通过结构体写入文件而形成,我们有时候想解析这些文件,那如何操作呢?python 的struct 模块和C 语言的结构体是相对应的,这样,只要知道结构体的定义,我们就可以通过struct 模块写出一些解析工具。

1. strcut 模块介绍

class  struct.Struct(format)

  返回:一个struct 对象(相对于C 的结构体)

  作用:该对象可以根据 格式化字符串的格式 来读写二进制数据。

  参数:格式化字符串(类似C语言中printf 打印输出的格式化字符串),其中第一个字符,指定字节的顺序(大端或者小端)。

注意:以大端或者小端的方式读写数据可以根据系统默认,不用指定;但是也可以指定。

例:struct.Struct('>I4sf')    里面的格式化字符串,参考后面的附表。

  >:  大端模式

  I:   unsigned int

  4s:  4 个 char

  f: float

1.1  方法pack

属性:

  format :格式化字符串

  size:结构体的大小

方法:

  pack(v1,v2, ....)

  返回:一个字节流对象

  s. pack(v1,v2, ....)   : 按照fmt(格式化字符串)的格式,来打包参数v1,v2,....。

  s.pack_into(buffer, offset, v1, v2, …)  :按照fmt(格式化字符串)的格式,来打包参数v1,v2,....,并将打包的字节从offset(偏移位置)处开始,写入可写缓冲buffer 中。(注意:这里的offset 是必需的参数)

  s.unpack_from(buffer,offset=) :按照fmt(格式化字符串)的格式,在offset偏移处开始,从缓冲区解包。其结果是一个元组。缓冲区的大小(以字节为单位,减去偏移量)必需至少为格式所需的大小,如calcsize() 所反映的。

2. 相关实例

这里来写几个常见的实例

2.1 一般情况

代码:

先将数据对象,放到一个元组中,然后创建一个Struct对象,并使用pack()方法打包该元组;然后解包该元组。

# -*- coding: utf-8 -*-
"""
打包和解包
"""
import struct
import binascii

values = (1, b'good', 1.22) #查看格式化对照表可知,字符串必须为字节流类型。
s = struct.Struct('I4sf')
packed_data = s.pack(*values)
unpacked_data = s.unpack(packed_data)
print('Original values:', values)
print('Format string :', s.format)
print('Uses :', s.size, 'bytes')
print('Packed Value :', binascii.hexlify(packed_data))
print('Unpacked Type :', type(unpacked_data), ' Value:', unpacked_data)

 结果:

Original values: (, b'good', 1.22)
Format string : b'I4sf'
Uses :  bytes
Packed Value : b'01000000676f6f64f6289c3f'
Unpacked Type : <class 'tuple'>  Value: (, b'good', 1.2200000286102295)
[Finished in .1s]

 

参考链接:

https://www.lmlphp.com/user/63990/article/item/721809/

标签:格式化,struct,Python,print,模块,字符串,data,pack
From: https://www.cnblogs.com/haoran123/p/17362279.html

相关文章

  • Python Ternary Operator All In One
    PythonTernaryOperatorAllInOnePythonTernaryExpression/PythonTernaryOperatorPython三元表达式/Python三元运算符Pythonternaryoperatorerror❌importosunicode=os.path.supports_unicode_filenames;#print("\nunicode=",unicode?"......
  • python日常工作处理-文件按比例分割数据
    python日常工作处理-文件按比例分割数据把一个保存用户id文本进行比例分割,比例为50%,分别另存为另外两个文件代码importrandominput_file='/Users/Desktop/2023-03-28.txt'group1_file='/Users/Desktop/group1_2023-03-28.txt'group2_file='/Users/Desktop/group2_......
  • Linux kernel 模块开发&构建学习
    主要是学习下kernel模块的玩法,代码来自社区简单kernel代码hello_world.c#include<linux/init.h>#include<linux/module.h>MODULE_LICENSE("DualBSD/GPL");staticinthello_init(void){printk(KERN_ALERT"Hello,world\n");......
  • python 日志打印log
    目录python日志打印loglogginglogurucoloredlogsrich总结python日志打印logPython中常用的打印log的库有以下几个:loggingPython标准库中的模块,提供了灵活的日志记录方式,可以输出到控制台或文件,支持级别控制、日志格式化等功能。使用logging模块打印日志的一般步骤如......
  • python设定闹钟提醒
    importtimeimportdatetime#设置提醒时间(24小时制)study_time="8:00:00"eat_time="12:00:00"sleep_time="23:00:00"whileTrue:#获取当前时间now=datetime.datetime.now().strftime("%H:%M:%S")#如果当前时间与提醒......
  • Python_Gooey和pyinstaller打造易用的工具
    Python沟通Python搭建GUI界面时,首选Gooey,然后PyQt5和Tkinter,Pyinstaller:--paths后接第三方模块的路径,多个路径直接用逗号分隔(英文逗号)-F后接源文件路径使用-F,只生成一个大的可执行文件--clean表示清理打包完成后的临时文件(可选,但建议写上)......
  • python用支持向量机回归(SVR)模型分析用电量预测电力消费|附代码数据
    全文链接:http://tecdat.cn/?p=23921最近我们被客户要求撰写关于SVR的研究报告,包括一些图形和统计输出。本文描述了训练支持向量回归模型的过程,该模型用于预测基于几个天气变量、一天中的某个小时、以及这一天是周末/假日/在家工作日还是普通工作日的用电量关于支持向量机的快速......
  • python学习——【第十九弹】
    前言从文章 python学习——【第十七弹】开始,我们开始进入python巩固篇,利用所学基础知识来做一个简单的学生信息管理系统,温故而知新。上篇文章python学习——【第十八弹】我们编写了学生信息管理系统的查询功能,这篇文章实现学生信息的删除功能。需求分析之前的学习我们了解了py......
  • 常见配置文件在Python中的使用
     配置文件主要为了存储常用的常量,如数据库的信息,通用的账号和密码等。常见的配置文件格式有ini,yaml,toml,json,env等,在做自动化测试的时候,它们都起什么样的作用?在什么样的场合下应用哪些配置文件? 一、ini配置文件简介:ini配置文件是最直接的配置文件,也是最简单的配置文件,将变量......
  • Python用RNN神经网络:LSTM、GRU、回归和ARIMA对COVID19新冠疫情人数时间序列预测|附代
    全文下载链接: http://tecdat.cn/?p=27042最近我们被客户要求撰写关于新冠疫情的研究报告,包括一些图形和统计输出。在本文中,该数据根据世界各国提供的新病例数据提供。获取时间序列数据df=pd.read_csv("C://global.csv")探索数据此表中的数据以累积的形式呈现,为了找出每天......