第二章:数据结构-struct:二进制数据结构-缓冲区

时间:2019-02-11
本文章向大家介绍第二章:数据结构-struct:二进制数据结构-缓冲区,主要包括第二章:数据结构-struct:二进制数据结构-缓冲区使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

2.7.4 缓冲区
通常在强调性能的情况下或者向扩展模块传入或传出数据时才会处理二进制打包数据。通过避免为每个打包结构分配一个新缓冲区所带来的开销,这些情况可以得到优化。pack_into()和unpack_from()方法支持直接写入预分配的缓冲区。

import array
import binascii
import ctypes
import struct

s = struct.Struct('I 2s f')
values = (1,'ab'.encode('utf-8'),2.7)
print('Original:',values)

print()
print('ctypes string buffer')

b = ctypes.create_string_buffer(s.size)
print('Before  :',binascii.hexlify(b.raw))
s.pack_into(b,0,*values)
print('After   :',binascii.hexlify(b.raw))
print('Unpacked:',s.unpack_from(b,0))

print()
print('array')

a = array.array('b',b'\0' * s.size)
print('Before  :',binascii.hexlify(a))
s.pack_into(a,0,*values)
print('After   :',binascii.hexlify(a))
print('Unpacked:',s.unpack_from(a,0))

Struct的size属性支持缓冲区需要有多大。
运行结果: