Python标准库笔记(8) — pprint模块(二)
ng |
integer |
8 |
(2), (3) |
Q |
unsigned long long |
integer |
8 |
(2), (3) |
n |
ssize_t |
integer |
(4) |
|
N |
size_t |
integer |
(4) |
|
f |
float |
float |
4 |
(5) |
d |
double |
float |
8 |
(5) |
s |
char[] |
bytes |
|
|
p |
char[] |
bytes |
|
|
P |
void * |
integer |
|
(6) |
5. 缓冲区
将数据打包成二进制通常是用在对性能要求很高的场景。 在这类场景中可以通过避免为每个打包结构分配新缓冲区的开销来优化。 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('原始值:', values)
print()
print('使用ctypes模块string buffer')
b = ctypes.create_string_buffer(s.size)
print('原始buffer :', binascii.hexlify(b.raw))
s.pack_into(b, 0, *values)
print('打包结果写入 :', binascii.hexlify(b.raw))
print('解包 :', s.unpack_from(b, 0))
print()
print('使用array模块')
a = array.array('b', b'\0' * s.size)
print('原始值 :', binascii.hexlify(a))
s.pack_into(a, 0, *values)
print('打包写入 :', binascii.hexlify(a))
print('解包 :', s.unpack_from(a, 0))
# output
原始值: (1, b'ab', 2.7)
使用ctypes模块string buffer
原始buffer : b'000000000000000000000000'
打包结果写入 : b'0100000061620000cdcc2c40'
解包 : (1, b'ab', 2.700000047683716)
使用array模块
原始值 : b'000000000000000000000000'
打包写入 : b'0100000061620000cdcc2c40'
解包 : (1, b'ab', 2.700000047683716)
首发地址: Python标准库笔记(6) — struct模块
|