【发布时间】:2013-09-24 13:28:41
【问题描述】:
问题:
- 固定大小记录的二进制数据
- 想使用 struct.unpack_from 和 struct.pack_into 来操作二进制数据
- 不想要数据的副本
- 希望多个视图进入内存以简单地偏移计算等。
- 数据可以在 array.array bytearray 或 ctypes 字符串缓冲区中
我想做什么:
part1 = buffer(binary_data, 0, size1)
part2 = buffer(binary_data, size1, size2)
part3 = buffer(binary_data, size1 + size2) # no size is given for this one as it should consume the rest of the buffer
struct.pack_into('I', part3, 4, 42)
这里的问题是 struct.pack_into 抱怨缓冲区是只读的。我研究了内存视图,因为它们可以创建读/写视图,但是它们不允许您像缓冲区函数那样指定偏移量和大小。
如何实现将多个零拷贝视图放入一个可读、可写并且可以使用 struct.unpack_from 和 struct.pack_into 访问/修改的字节缓冲区
【问题讨论】:
-
我可以做到,但我希望有更好的方法。我希望能够创建几个具有固定大小和偏移量的缓冲区。这样,pack_into 调用就不必计算总偏移量,只需计算我正在写入的特定结构/片段的偏移量。如果我直接打包到结构中,我的所有调用将看起来像
pack_into(fmt, buffer, part_offset + offset, v1, v2 ...)而不是pack_into(fmt, buffer, offset, v1, v2, ...)我真的试图避免每次都计算数据的总偏移量。
标签: python python-2.7 bytearray ctypes