第二章:数据结构-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属性支持缓冲区需要有多大。
运行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值