python之struct详解_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, b‘good‘, 1.22)

Formatstring : b‘I4sf‘Uses :12bytes

Packed Value : b‘01000000676f6f64f6289c3f‘Unpacked Type : Value: (1, b‘good‘, 1.2200000286102295)

[Finishedin 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, b‘good‘, 1.22)

Formatstring : b‘I4sf‘buff :Packed Value : b‘01000000676f6f64f6289c3f‘Unpacked Type : Value: (1, b‘good‘, 1.2200000286102295)

[Finishedin 0.1s]

说明:

附:

1.格式化对照表

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

原文:http://www.cnblogs.com/leomei91/p/7602603.html

你可能感兴趣的:(python之struct详解)