struct模块简介

struct简介

使用struct可以在python数值和C的结构之间进行转换,表示方式为Python strings. 一般用于处理文件中的二进制数据(如:BMP图片)或是网络连接中的报文(如:OSPF, EIGRP报文内容)

方法:

struct.pack(fmt, v1, v2, ...) 根据fmt规定的格式对v1, v2, ...内容进行打包, 并返回打包(转换)后的字节码.

struct.pack_into(fmt, buffer, offset, v1, v2, ...) 根据fmt规定的格式对v1, v2, ...内容进行打包, 然后将打包后的内容写入buffer中offset位置.

struct.unpack(fmt, string)根据fmt规定的格式对string(其实是字节码)进行unpack(解码), 并以元组的形式返回解码内容.

struct.unpack_from(fmt, buffer[, offset=0])对buffer中offset位置起始的内容根据fmt进行解码,并将结果以元组形式返回.

struct.calcsize(fmt) 返回fmt指定的格式转换后的数据长度(unit: Byte)

格式参数: fmt

Order Character

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 Character

Format C Type Python Type Standard size
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 unsigned long long integer 8
f float float 4
d double float 8
s char[] string
p char[] string
P void * integer

Examples

Construct the first part of an IP packet

import struct
#69 is  Version and IHL, 0 is TOS, 1420 is Total Length
first_line = struct.pack('>BBH', 69, 0, 1420)  
print(first_line)
> b'E\x00\x05\x8c'

#calculate the length of format '>BBH'
struct.calcsize('>BBH')
> 4   

Unpack a string according to the format character

import struct
s1 = b'E\x00\x05\x8c'
#unpack the string s1 (s1 is Bytes) according to format '>BBH'
result = struct.unpack('>BBH', s1)
print(result)
>(69, 0, 1420)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 该模块在Python值和表示为Python bytes对象的C结缓冲区构体之间进行转换。可用于处理存储在文件中或者...
    lakerszhy阅读 1,353评论 0 0
  • about 这篇文章是Python2 的官方文档 7.3. struct — Interpret strings ...
    庞贝船长阅读 6,296评论 1 3
  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 13,949评论 0 38
  • 在家人们聊的正激烈时,他气愤的走了出去。 当时我在看电视,不知道发生了什么。来不及了解这件事,大脑的第一反应就是去...
    k坚持阅读 203评论 0 1
  • 使用“导入照片和视频” iPhone连接到电脑后,鼠标右键点击iPhone的设备图标,选择“导入照片和视频”。 在...
    杨肆月阅读 12,852评论 1 1