python学习之struct模块

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python学习之struct模块相关的知识,希望对你有一定的参考价值。

class struct.Struct(format)

返回一个struct对象(结构体,参考C)。

该对象可以根据格式化字符串的格式来读写二进制数据。

第一个参数格式化字符串可以指定字节的顺序。

默认是根据系统来确定,也提供自定义的方式,只需要在前面加上特定字符即可:

 

struct.Struct(>I4sf)

 

特定字符对照表附件有。

 

 

常见方法和属性:

struct.pack(fmt, v1, v2, …)

返回一个字节流对象。

按照fmt(格式化字符串)的格式来打包参数v1,v2,...。

通俗的说就是:

首先将不同类型的数据对象放在一个“组”中(比如元组(1,‘good‘,1.22)),

然后打包(“组”转换为字节流对象),最后再解包(将字节流对象转换为“组”)。

format

格式化字符串。

size

 

结构体的大小。

 

实例:

1.通常的打包和解包

# -*- coding: utf-8 -*-
"""
打包和解包
"""
import struct
import binascii

values = (1, b‘good‘, 1.22) #查看格式化字符串可知,字符串必须为字节流类型。
s = struct.Struct(‘I4sf‘)
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, bgood, 1.22)
Format string : bI4sf
Uses : 12 bytes
Packed Value : b01000000676f6f64f6289c3f
Unpacked Type : <class tuple>  Value: (1, bgood, 1.2200000286102295)
[Finished in 0.1s]

说明:

首先将数据对象放在了一个元组中,然后创建一个Struct对象,并使用pack()方法打包该元组;最后解包返回该元组。

这里使用到了binascii.hexlify(data)函数。

binascii.hexlify(data)

返回二进制数据的十六进制表示。

2.使用buffer来进行打包和解包

 

# -*- coding: utf-8 -*-
"""
通过buffer方式打包和解包
"""
import struct
import binascii
import ctypes

values = (1, b‘good‘, 1.22) #查看格式化字符串可知,字符串必须为字节流类型。
s = struct.Struct(‘I4sf‘)
buff = ctypes.create_string_buffer(s.size)
packed_data = s.pack_into(buff,0,*values)
unpacked_data = s.unpack_from(buff,0)
 
print(‘Original values:‘, values)
print(‘Format string :‘, s.format)
print(‘buff :‘, buff)
print(‘Packed Value :‘, binascii.hexlify(buff))
print(‘Unpacked Type :‘, type(unpacked_data), ‘ Value:‘, unpacked_data)

 

 结果:

Original values: (1, bgood, 1.22)
Format string : bI4sf
buff : <ctypes.c_char_Array_12 object at 0x00000008A8C27348>
Packed Value : b01000000676f6f64f6289c3f
Unpacked Type : <class tuple>  Value: (1, bgood, 1.2200000286102295)
[Finished in 0.1s]

说明:

 

 

 

附:

1.格式化对照表

技术分享

2.字节顺序,大小和校准

技术分享

 


以上是关于python学习之struct模块的主要内容,如果未能解决你的问题,请参考以下文章

Python学习之模块

python学习之模块:xlsxwriter

Python面向对象学习之八,装饰器

Python模块学习之特殊函数 __call__ 的使用

python学习之sys模块

swift简单学习之Struct