本文主要是介绍[Python 实战] - No.11 Python Struct 模块使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Python提供了一个struct
模块来解决bytes
和其他二进制数据类型的转换
函数 | return | explain |
---|---|---|
pack(fmt,v1,v2…) | string | 按照给定的格式(fmt),把数据转换成字符串(字节流),并将该字符串返回. |
pack_into(fmt,buffer,offset,v1,v2…) | None | 按照给定的格式(fmt),将数据转换成字符串(字节流),并将字节流写入以offset开始的buffer中.(buffer为可写的缓冲区,可用array模块) |
unpack(fmt,v1,v2…..) | tuple | 按照给定的格式(fmt)解析字节流,并返回解析结果 |
pack_from(fmt,buffer,offset) | tuple | 按照给定的格式(fmt)解析以offset开始的缓冲区,并返回解析结果 |
calcsize(fmt) | size of fmt | 计算给定的格式(fmt)占用多少字节的内存,注意对齐方式 |
比较重要的是pack()
和unpack()
两个函数,上表中的format格式如下:
Character | Byte order | Size | Alignment |
---|---|---|---|
@ | native | native | native |
= | native | standard | none |
< | little-endian | standard | none |
> | big-endian | standard | none |
! | network (= big-endian) | standard | none |
Format | C Type | Python type | Standard size | Notes |
---|---|---|---|---|
x | pad byte | no value | ||
c | char | string of length 1 | 1 | |
b | signed char | integer | 1 | |
B | unsigned char | integer | 1 | |
? | _Bool | bool | 1 | |
h | short | integer | 2 | |
H | unsigned short | integer | 2 | |
i | int | integer | 4 | |
I | unsigned int | integer | 4 | |
l | long | integer | 4 | |
L | unsigned long | integer | 4 | |
q | long long | integer | 8 | q和Q只适用于64位机器; |
Q | unsigned long long | integer | 8 | q和Q只适用于64位机器; |
f | float | float | 4 | |
d | double | float | 8 | |
s | char[] | string | ||
p | char[] | string | ||
P | void * | integer |
每个格式前可以有一个数字,表示这个类型的个数,如s格式表示一定长度的字符串,4i表示四个int
struct
的pack
函数把任意数据类型变成bytes
:
import struct
print(struct.pack("<i",123456))
print(struct.pack("<3s",b'hello'))
print(struct.pack("<5sl",b'hello',123456))
b'@\xe2\x01\x00'
b'hel'
b'hello@\xe2\x01\x00'
unpack
把bytes
变成相应的数据类型:
import struct
mybytes = struct.pack("<5sl",b'hello',123456)
mystr = struct.unpack("<5sl",mybytes)
print(mystr)
(b'hello', 123456)
mybytes
字节流中有两个部分,一个是长度为5的string类型,一个是4个byte
的long
如果想查看给定的格式占多少个字节,可以使用calcsize(fmt)
,用法如下:
print 'l:',calcsize('l')
print '@i:',calcsize('@i')
print '=i:',calcsize('=i')
print '>s:',calcsize('>s')
print '<q:',calcsize('<q')
这篇关于[Python 实战] - No.11 Python Struct 模块使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!