浅谈python中struct模块的使用

本文介绍了Python的struct模块,用于将Python基本类型与字节流之间进行转换,特别是在网络通信和二进制数据处理中。文章涵盖了struct的作用、所需的前置知识,如字节顺序和fmt格式化,并通过代码示例展示了如何进行打包和解包操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

前言:

​ 最近在学习python网络编程这一块,在写简单的socket通信代码时,遇到了struct这个模块的使用,那么在这里就简单的介绍一下struct模块
​ 了解c语言的人,一定会知道struct结构体在c语言中的作用,它定义了一种结构,里面包含不同类型的数据(int,char,bool等等),方便对某一结构对象进行处理。而在网络通信当中,大多传递的数据是以二进制流(binary data)存在的。当传递字符串时,不必担心太多的问题,而当传递诸如int、char之类的基本数据的时候,就需要有一种机制将某些特定的结构体类型打包成二进制流的字符串然后再网络传输,而接收端也应该可以通过某种机制进行解包还原出原始的结构体数据。 python中的struct模块就提供了这样的机制。

一、struct的作用是什么

​ 该模块的主要作用就是对python基本类型值与 bytes字节流之间的转换

二、学习struct之前需要具备的知识

1.字节顺序/大小/对齐

默认情况下,pack是使用本地C库的字节顺序来编码的。格式化字符串的第一个字符可以用来表示填充数据的字节顺序、大小和对齐方式,如下表所描述的:

在这里插入图片描述
如果格式符中没有设置这些,那么默认将使用 @。

本地字节顺序是指字节顺序是由当前主机系统决定。比如:Intel x86和AMD64(x86-64)使用小字节序; Motorola 68000和 PowerPC G5使用大字节序。ARM和Intel安腾支持切换字节序。可以使用sys.byteorder查看当前系统的字节顺序。

本地大小(Size)和对齐(Alignment)是由c编译器的sizeof表达式确定的。它与本地字节顺序对应。

2.fmt格式化

struct其实使用起来很简单,但是有些人对struct中fmt格式化的含义了解不是很清楚,导致使用起来非常困难,这里需要了解一下c语言中的类型含义

字符 C类型 C含义 python类型 标准尺寸
x 填充字节 转义字符 没有意义的值
c char 容纳单字符的一种基本数据类型 长度为1的字节 1
b signed char 有符号 整型 1
B unsigned char 无符号 整型 1
_Bool<
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值