繁体   English   中英

什么是适合Python的struct模块的缓冲区

[英]What is a suitable buffer for Python's struct module

在Python中,我通过将其读入字符串然后使用struct.unpack(...)来访问二进制文件。 现在我想使用struct.pack_into(...)写入该字符串,但是我收到错误“不能将字符串用作可修改的缓冲区” 什么是与struct模块一起使用的合适缓冲区?

正如另一个答案所述, 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中的新C级缓冲API和memoryview对象所取代(以及即将发布的2.7)。

如果您不想将其打包到特定对象中,只需使用struct.pack返回一个字符串。

否则, ctypes.create_string_buffer是获取可变缓冲区的一种方法。

两种可能性立即浮现在脑海中:

  • 您可以使用Python stringio模块创建具有文件语义的读/写缓冲区。

  • 您可以使用Python 数组模块来获取可以像列表一样处理的缓冲区,但它只包含二进制字节。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM