首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

python中的struct对象

在Python中,struct是一个模块,用于将数据序列化和反序列化为二进制数据。它可以将Python数据类型转换为二进制数据,以便在网络通信、文件读写等场景中使用。

struct模块提供了一系列的方法,用于将Python数据类型转换为二进制数据。例如,pack方法可以将Python数据类型转换为二进制数据,unpack方法可以将二进制数据转换为Python数据类型。

struct模块的常用方法如下:

  • pack(fmt, v1, v2, ...):将Python数据类型转换为二进制数据。fmt参数指定数据类型和字节序,v1, v2, ...参数指定要转换的Python数据类型。
  • unpack(fmt, buffer):将二进制数据转换为Python数据类型。fmt参数指定数据类型和字节序,buffer参数指定要转换的二进制数据。
  • calcsize(fmt):返回pack方法的结果字节大小。
  • pack_into(fmt, buffer, offset, v1, v2, ...):将Python数据类型转换为二进制数据,并将结果写入buffer中的指定位置。
  • unpack_from(fmt, buffer, offset=0):从buffer中的指定位置开始,将二进制数据转换为Python数据类型。

struct模块常用的数据类型和字节序如下:

  • c:单个字符。
  • b:有符号整数,占用1个字节。
  • B:无符号整数,占用1个字节。
  • h:有符号整数,占用2个字节。
  • H:无符号整数,占用2个字节。
  • i:有符号整数,占用4个字节。
  • I:无符号整数,占用4个字节。
  • q:有符号整数,占用8个字节。
  • Q:无符号整数,占用8个字节。
  • f:单精度浮点数,占用4个字节。
  • d:双精度浮点数,占用8个字节。
  • s:字符串,占用指定字节数。
  • p:指针,占用指定字节数。

struct模块常用的字节序如下:

  • @:根据系统字节序自动选择字节序。
  • <:小端字节序。
  • >:大端字节序。
  • !:网络字节序,即大端字节序。

在使用struct模块时,需要注意以下几点:

  • 在使用packunpack方法时,需要确保数据类型和字节序与要转换的数据匹配。
  • 在使用pack_intounpack_from方法时,需要确保buffer中有足够的空间来存储转换后的数据。
  • 在使用packpack_into方法时,需要注意Python数据类型和数据类型之间的转换关系。例如,Python中的整数会自动转换为二进制数据,而浮点数需要使用struct.pack('f', x)struct.pack('d', x)进行转换。

总之,struct模块是Python中用于序列化和反序列化数据的重要模块,可以在网络通信、文件读写等场景中使用。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • python源码阅读笔记之GC(一)

    python源码阅读: 参考书籍:《python源码剖析》 摘要:写这个系列的目的呢,是想为python的学习画上一个暂时的句号,接下来的重点应该是scala这门语言和其身后的函数式编程思想了。整个文章大概会分为python的对象体系(主要是container对象的字典以及字符串),函数和类的运行机制,模块的动态加载,线程机制,垃圾回收机制。不会做到面面俱到,但是会尽量把底层的代码展现给大家,这次的python的源码使用的是python 2.7.2版本。 一、源码的目录体系和整体架构 File Groups Python Core Runtime Environment Core Modules SCanner Object/Type Structures Library Parser Memory Allocator User-defined Compiler Current State Of Python Modules Code Evauator 简单来说,你可以把python的解释器视为一个优秀的编译原理实践,ANSI C实现的。遵循了最流行的词法分析,解析成token,再语法分析,建立抽象语法树AST,最后compiler根据AST,生成字节码,执行。 目录 概要 Demo python的演示程序,里面包括了CGI,class演示等 Doc python的文档 Grammar python的语法文件 Include python编译时引用的头文件 Lib 标准附加库 Mac Mac用的工具 Misc 各种文件的集合(例如vim) Modules python的C语言扩展 Objects python的对象使用的C语言代码 PC 依存于操作环境 PCbuild 构造win32和x64用的 Parser python用的解析器 Python python的核心

    02

    用python写exploit

    测试软件漏洞时,个人比较钟爱用python来完成exploit,简单,快速。也见过不少用perl来写的,我不喜欢。随便记录一些常用的方法。 python中有个概念叫模块,模块中包含了定义的函数,方便重用。使用模块的语句如下: import 模块名 struct模块有个很方便的函数,pack,格式如下: struct.pack(format,参数) 将参数内容转换成format中指定的格式。写shellcode时,需要将覆盖地址倒序(little-endian)排列,为了方便,咱们可以使用这个函数。咱们要用到的指定格式是"<L”,以无符号长整型的little-endian格式。 0x7ffa4512是通杀windows 2000/xp/2003的jmp esp地址,以它为例: import struct struct.pack('<L',0x7ffa4512) 溢出测试时,常常需要生成一长串字符串去填充缓冲区,用循环的话比较麻烦。python中直接可以用乘号来操作字符串: shellcode = '\x90' * 1000 执行后,shellcode的值为1000个\x90。 同时也可以用加号来操作字符串,连接两个字符串的例子如下: import struct buffer = 'A' * 100 jmpesp = struct('<L', 0x7ffa4512) #将0x7ffa4512转化为\x12\x45\xfa\x7f的格式 buffer += jmpesp 在python中“+=”与C语言中的“+=”用法一样,buffer += jmpesp等同于buffer = buffer + jmpesp,当然也可以用后者来表示。 ord函数可用于将指定字符转换成ASCIIi码,函数声明如下: ord(字符) 例: >>>print ord('A') 65 注意ord函数只接受字符,不能接受字符串。 对读取文件时发生溢出的程序来说,需要生成一个带有测试代码的文件。python提供了方便的文件操作函数。 filename = 'test'         #定义一个变量,赋值为将要打开的文件名 payload = 'A' * 5000  #生成五千个A f = open(filename,'w') #以写模式打开文件 f.write(payload)          #将五千个A写入到该文件内 f.close                        #关闭 执行以上代码后,会在当前目录下生成一个内容为5000个A的、文件名为test的文件。 有时需要对网络程序进行安全性测试,python也提供了socket编程。需要使用socket模板。 import socket shellcode = 'A' * 1000 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)   #创建一个socket对象 s.connect(("127.0.0.1", 200))  #连接到127.0.0.1,端口指定为200 s.send(shellcode)                    #发送数据(一千个A) 该例子可以用在FTP Server之类的网络程序进行测试。

    02
    领券