Python模块——struct

python中该如何实现类似于C语言中字节型的变量?

python提供了一个struct模块来提供转换。该模块的主要作用是对python基本类型值与用python字符串格式表示的C struct类型间的转化。这个模块提供的几种方法:

1.struct.pack()

———— 根据所给的fmt描述的格式将值v1,v2,...转换为一个字符串。

       struct.pack 用于将Python的值根据格式符,转换为字符串(因为Python中没有字节(Byte)类型,可以把这里的字符串理解为字节流,或字节数组)。其函数原型为:struct.pack( fmt, v1, v2, ...),参数 fmt 是格式字符串(如下表),v1, v2, ...表示要转换的python值。 

格式符C语言类型Python类型
xpad byteno value
ccharstring of length 1
bsigned charinteger
Bunsigned charinteger
?_boolbool
hshortinteger
Hunsigned shortinteger
iintinteger
Iunsigned intinteger or long
llonginteger
Lunsigned longlong
qlong longlong
Qunsigned long longlong
ffloatfloat
ddoublefloat
schar[ ]string
pchar[ ]string
Pvoid*long

2.struct.unpack()

———— 根据所给的fmt描述的格式将bytes反向解析出来,返回一个元组。


举个栗子:

import struct 
import binascii 
values = (1, 'abc', 2.7) 
s = struct.Struct('I3sf') 
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: (1, 'abc', 2.7)
Format string : I3sf
Uses : 12 bytes
Packed Value : 0100000061626300cdcc2c40
Unpacked Type : <type 'tuple'> Value: (1, 'abc', 2.700000047683716)

代码中,首先定义了一个元组数据,包含int、string、float三种数据类型,然后定义了struct对象,并制定了format‘I3sf’,I 表示int,3s 表示三个字符长度的字符串,f 表示 float。最后通过struct的pack和unpack进行打包和解包。通过输出结果可以发现,value被pack之后,转化为了一段二进制字节串,而unpack可以把该字节串再转换回一个元组,但是值得注意的是对于float的精度发生了改变,这是由一些比如操作系统等客观因素所决定的。打包之后的数据所占用的字节数与C语言中的struct十分相似。


unsigned 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值