在 Python 中,我通过将二进制文件读入字符串然后使用struct.unpack(...)
. 现在我想使用 写入该字符串struct.pack_into(...)
,但我收到错误"Cannot use string as modifiable buffer"。什么是适合与struct
模块一起使用的缓冲区?
问问题
7661 次
3 回答
7
如另一个答案所述,struct_pack
可能是您需要并且应该使用的全部内容。但是,数组类型的对象支持缓冲区协议并且可以修改:
>>> import array, struct
>>> a = array.array('c', ' ' * 1000)
>>> c = 'a'; i = 1
>>> struct.pack_into('ci', a, -0, c, i)
>>> a
array('c', 'a\x00\x00\x00\x01\x00\x00\x00 ...
最初的缓冲区协议主要用于 C 扩展。在 Python 3(以及即将到来的 2.7)中,它已被新的 C 级缓冲区 API 和 memoryview 对象弃用并取代。
于 2009-11-14T00:30:50.030 回答
6
如果您不想将其打包到特定对象中,只需使用它struct.pack
来返回一个字符串。
否则,ctypes.create_string_buffer
是获取可变缓冲区的一种方法。
于 2009-11-14T00:12:45.387 回答