Python使用struct库的用法

简介

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

故提供一个库来做转换。

常用函数

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

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

import struct
result = [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 struct
result = 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 struct
print(struct.calcsize('<BHI')) # 7

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

format参数的用法

数据

FormatC TypePython字节数
xpad byteNone1
ccharint1
bsigned charint1
Bunsigned charint1
?Boolbool1
hshortint2
Hunsigned shortint2
iintint4
Iunsigned intint4
llongint4
Lunsigned longint4
qlong longint8
Qunsigned long longint8
ffloatfloat4
ddoublefloat8
schar[]bytes1
pchar[]bytes1
Pvoid *int0

描述符

CharacterByte orderSizealignment
@nativenative凑足4个字节
=nativestandard不作变化
<little-endianstandard不作变化
>big-endianstandard不作变化
!network (= big-endian)standard不作变化
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
pythonstruct模块用于处理C结构化数据的转换和打包。它提供了一种将数据结构转换为字节序列(打包)和将字节序列转换回数据结构(解包)的方法。下面是struct模块的一些常用用法: 1. 打包(pack):将数据结构转换为字节序列。使用`struct.pack(format, v1, v2, ...)`函数,其中format是格式化字符串,v1, v2, ...是要打包的值。例如,`struct.pack('!I', 123)`将整数123打包为一个无符号四字节整数的字节序列。 2. 解包(unpack):将字节序列转换为数据结构。使用`struct.unpack(format, buffer)`函数,其中format是格式化字符串,buffer是要解包的字节序列。例如,`struct.unpack('!I', b'\x00\x00\x00{')`将四字节的字节序列解包为一个无符号整数123。 3. 计算字节大小(calcsize):计算指定格式化字符串的字节大小。使用`struct.calcsize(format)`函数,其中format是格式化字符串。例如,`struct.calcsize('!I')`返回无符号四字节整数的字节大小。 4. 进一步的格式化字符:struct模块支持多种格式化字符,用于表示不同的数据类型和字节顺序。常见的格式化字符包括: - `b`:有符号字节 - `B`:无符号字节 - `h`:有符号短整数 - `H`:无符号短整数 - `i`:有符号整数 - `I`:无符号整数 - `f`:单精度浮点数 - `d`:双精度浮点数 以上是struct模块的基本用法,你可以通过查阅官方文档来了解更多详细信息和示例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值