Python中使用pack/unpack编码字节数据

在Python中,是没有int, long这些c系的强类型的,但是有的时候,我们需要按照字节规则,生成这样的数据。

例如:生成一份网络序的,char+unsigned long数据(4+8字节):

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
from struct import pack
pack('!BQ', 100, 1000)
'd\x00\x00\x00\x00\x00\x00\x03\xe8'
from struct import pack pack('!BQ', 100, 1000) 'd\x00\x00\x00\x00\x00\x00\x03\xe8'
from struct import pack
pack('!BQ', 100, 1000)
'd\x00\x00\x00\x00\x00\x00\x03\xe8'

其中,第1个!表示为网络字节序。

BQ是占位符号,分别表示8bit的unsigned char和64bit的unsigned long long,更多的占位符号,可以见Python文档

读取也是类似的,使用unpack方法:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
from struct import pack, unpack
data = pack('!BQ', 100, 1000)
unpack('!BQ', data)
> (100, 1000)
from struct import pack, unpack data = pack('!BQ', 100, 1000) unpack('!BQ', data) > (100, 1000)
from struct import pack, unpack
data = pack('!BQ', 100, 1000)
unpack('!BQ', data)
> (100, 1000)

 

Leave a Reply

Your email address will not be published. Required fields are marked *