Python使用struct库的用法小结

目录
  • struct简介
  • 常用函数
    • struct.pack(format:str, v1, v2, …)
    • struct.unpack(format:str,buffer:bytes)
    • struct.calcsize(format:str)
  • format参数的用法
    • 数据
    • 描述符

struct简介

看到struct这么英文单词,大家应该并不陌生,因为c/c++中就有struct,在那里struct叫做结构体。在Python中也使用struct,这充分说明了这个struct应该和c/c++中的struct有很深的渊源。Python正是使用struct模块执行Python值和C结构体之间的转换,从而形成Python字节对象。它使用格式字符串作为底层C结构体的紧凑描述,进而根据这个格式字符串转换成Python值。

准确地讲,Python没有专门处理字节的数据类型。但由于b'str'可以表示字节,所以,字节数组=二进制str。而在C语言中,我们可以很方便地用struct、union来处理字节,以及字节和int,float的转换。

故提供一个库来做转换。

常用函数

struct.pack(format:str, v1, v2, …)

按format的格式打包v1、v2等参数

import structresult = [1,2,3,4,5]print([struct.pack('<B', x) for x in result])# [b'\x01', b'\x02', b'\x03', b'\x04', b'\x05']

struct.unpack(format:str,buffer:bytes)

按format的格式解包buffer数据,注意结果是一个数组

import structresult = bytes.fromhex('10002030000000')print(struct.unpack('<BHI', result))# (16, 8192, 48)

上代码是按小端序列进行解析的

10被解析成了16

0020被解析成了 0x00 + 0x20 * 256 = 32*256 = 8192

30000000被解析成了 0x30 + 0x0 * 256 + 0x0 * 16³ + 0x0 * 256² = 48

struct.calcsize(format:str)

按format的格式计算这个格式本应该的大小

import structprint(struct.calcsize('<BHI')) # 7

B是1个字节,H是2个字节,I是4个字节,共7个字节

format参数的用法

数据

Format C Type Python 字节数
x pad byte None 1
c char int 1
b signed char int 1
B unsigned char int 1
? Bool bool 1
h short int 2
H unsigned short int 2
i int int 4
I unsigned int int 4
l long int 4
L unsigned long int 4
q long long int 8
Q unsigned long long int 8
f float float 4
d double float 8
s char[] bytes 1
p char[] bytes 1
P void * int 0

描述符

Character Byte order Size alignment
@ native native 凑足4个字节
= native standard 不作变化
< little-endian standard 不作变化
> big-endian standard 不作变化
! network (= big-endian) standard 不作变化

到此这篇关于Python使用struct库的用法小结的文章就介绍到这了,更多相关Python使用struct库内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python使用struct处理二进制(pack和unpack用法)

    有的时候需要用python处理二进制数据,比如,存取文件,socket操作时.这时候,可以使用python的struct模块来完成.可以用 struct来处理c语言中的结构体. struct模块中最重要的三个函数是pack(), unpack(), calcsize() # 按照给定的格式(fmt),把数据封装成字符串(实际上是类似于c结构体的字节流) pack(fmt, v1, v2, ...) # 按照给定的格式(fmt)解析字节流string,返回解析出来的tuple unpack(fmt

  • Python标准库笔记struct模块的使用

    最近在学习python网络编程这一块,在写简单的socket通信代码时,遇到了struct这个模块的使用,当时不太清楚这到底有和作用,后来查阅了相关资料大概了解了,在这里做一下简单的总结. 了解c语言的人,一定会知道struct结构体在c语言中的作用,它定义了一种结构,里面包含不同类型的数据(int,char,bool等等),方便对某一结构对象进行处理.而在网络通信当中,大多传递的数据是以二进制流(binary data)存在的.当传递字符串时,不必担心太多的问题,而当传递诸如int.char之

  • Python基础笔记之struct和格式化字符

    目录 简介 struct中的方法 格式字符串 字节顺序,大小和对齐方式 格式字符 格式数字 格式字符 格式字符串 填充的影响 复杂应用 总结 简介 文件的存储内容有两种方式,一种是二进制,一种是文本的形式.如果是以文本的形式存储在文件中,那么从文件中读取的时候就会遇到一个将文本转换为Python中数据类型的问题.实际上即使是文本的形式存储,存储的数据也是也是有结构的,因为Python底层是用C来编写的,这里我们也称之为C结构. Lib/struct.py 就是负责进行这种结构转换的模块. str

  • python 用struct模块解决黏包问题

    为什么会出现黏包现象: 首先只有在TCP协议中才会出现黏包现象,是因为TCP协议是面向流的协议,在发送的数据传输的过程中还有缓存机制来避免数据丢失,因此,在连续发送小数据的时候,以及接收大小不符的时候容易出现黏包现象.本质还是因为我们在接收数据的时候不知道发送的数据的长短. 解决黏包问题 在传输大量数据之前首先告诉接收端要发送的数据大小,如果想更漂亮的解决问题,可以通过struct模块来定制协议. struct模块: 功能:可以把一个类型,如数字,转成固定长度的bytes. import str

  • Python二进制数据结构Struct的具体使用

    目录 二进制数据结构Struct 函数与Struct类 打包 解包 字节序指示符 缓冲区 二进制数据结构Struct 在C/C++语言中,struct被称为结构体.而在Python中,struct是一个专门的库,用于处理字节串与原生Python数据结构类型之间的转换. 本篇,将详细介绍二进制数据结构struct的使用方式. 函数与Struct类 struct库包含了一组处理结构值得模块级函数,以及一个Struct类.格式指示符将由字符串格式转换为一种编译表示,这与处理正则表达式得方式类似. 这个

  • Python使用struct库的用法小结

    目录 struct简介 常用函数 struct.pack(format:str, v1, v2, …) struct.unpack(format:str,buffer:bytes) struct.calcsize(format:str) format参数的用法 数据 描述符 struct简介 看到struct这么英文单词,大家应该并不陌生,因为c/c++中就有struct,在那里struct叫做结构体.在Python中也使用struct,这充分说明了这个struct应该和c/c++中的struc

  • python中pycurl库的用法实例

    本文实例讲述了python中pycurl库的用法,分享给大家供大家参考. 该实例代码实现从指定网址读取网页,主要是pycurl库的使用. 具体实现方法如下: #定义一个类 class CallBack: """ for pycurl """ def __init__(self): """Constructor""" self.data = "" def func(se

  • Python爬虫PyQuery库基本用法入门教程

    本文实例讲述了Python爬虫PyQuery库基本用法.分享给大家供大家参考,具体如下: PyQuery库也是一个非常强大又灵活的网页解析库,如果你有前端开发经验的,都应该接触过jQuery,那么PyQuery就是你非常绝佳的选择,PyQuery 是 Python 仿照 jQuery 的严格实现.语法与 jQuery 几乎完全相同,所以不用再去费心去记一些奇怪的方法了. 官网地址:http://pyquery.readthedocs.io/en/latest/ jQuery参考文档: http:

  • Python Pillow(PIL)库的用法详解

    Pillow库是一个Python的第三方库. 在Python2中,PIL(Python Imaging Library)是一个非常好用的图像处理库,但PIL不支持Python3,所以有人(Alex Clark和Contributors)提供了Pillow,可以在Python3中使用. 官方文档路径:https://pillow.readthedocs.io/en/latest/ 一.安装Pillow pip install pillow Pillow库安装成功后,导包时要用PIL来导入,而不能用

  • python爬虫---requests库的用法详解

    requests是python实现的简单易用的HTTP库,使用起来比urllib简洁很多 因为是第三方库,所以使用前需要cmd安装 pip install requests 安装完成后import一下,正常则说明可以开始使用了. 基本用法: requests.get()用于请求目标网站,类型是一个HTTPresponse类型 import requests response = requests.get('http://www.baidu.com')print(response.status_c

  • python中doctest库实例用法

    doctest库就是一个测试用的标准库,从意义上我们可以看出是关于测试有关系的,基本上就是测试是否和自己想要的结果是否一致,经常能在编写文档时候进行使用,之前也给大家介绍过开发工具中unittest单元测试的使用,同理之下,本章内容也是非常简单的,下面小编就用全面,简洁,实用来介绍,作为初学者们的知识字典库. 语言使用: python -m doctest 语法: doctest.testmod() 实例应用: >>> # comments are ignored >>>

  • python中Mako库实例用法

    Mako是一个模板库.一种嵌入式的语言,能够实现简化组件布局以及继承,主要的用途也是和作用域有关,但是效果是最直接切灵活的,这些都是mako的基本功能,掌握了基础内容,接下来就是详细的了解讲述,从几个方面为大家详细讲述,首先在众多模板库中的优点,以及实例应用等等,一起来了解学习下吧. Mako的优点: 学习成本低,能够在结构上进行转义. 应用方向: 文本文件生成. 模块引用: from mako.template import Template 基本用法: from mako.template

  • Python的信号库Blinker用法详解

    作为一个信号库,使用时候是支持一对一以及一对多的订阅模式,可以实现发送数据等,一般情况下,只要能够使用到Blinker的,一般都是应用在技术设计以及垃圾回收上等等,以上就是关于Blinker库的基本信息,具体的情况,小编将详细的为大家介绍讲解,好啦一起来了解看下吧. 安装环境: Python 3.6.4 安装方式: pip install blinker 使用实例: In [1]: from blinker import signal In [2]: a = signal('signal_tes

  • Python中selenium库的用法详解

    selenium主要是用来做自动化测试,支持多种浏览器,爬虫中主要用来解决JavaScript渲染问题. 模拟浏览器进行网页加载,当requests,urllib无法正常获取网页内容的时候 一.声明浏览器对象 注意点一,Python文件名或者包名不要命名为selenium,会导致无法导入 from selenium import webdriver #webdriver可以认为是浏览器的驱动器,要驱动浏览器必须用到webdriver,支持多种浏览器,这里以Chrome为例 browser = w

  • Python中BeautifuSoup库的用法使用详解

    BeautifulSoup简介 Beautiful Soup是python的一个库,最主要的功能是从网页抓取数据.官方解释如下: Beautiful Soup提供一些简单的.python式的函数用来处理导航.搜索.修改分析树等功能.它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简单,所以不需要多少代码就可以写出一个完整的应用程序. Beautiful Soup自动将输入文档转换为Unicode编码,输出文档转换为utf-8编码.你不需要考虑编码方式,除非文档没有指定一个编码方式,这时

随机推荐