我通常在C++中执行这样的操作,但我正在使用python编写一个快速脚本而且我遇到了一堵墙.
如果我有一个二进制列表(或任何python存储"fread"的结果).我可以使用:buffer [0],buffer [1]等访问其中的各个字节.
我需要更改字节[8-11]以保存新的32位文件大小(读取:那里已有文件大小,我需要更新它).在C++中,我只是得到一个指向该位置的指针并将其转换为存储整数,但是使用python我突然意识到我不知道如何做这样的事情.
如何在特定位置更新缓冲区中的4个字节以保存python中的整数值?
编辑
我将添加更多,因为我似乎无法从解决方案中找到它(虽然我可以看到它们在正确的轨道上).
首先,我在python 2.4(并且无法升级,大公司服务器) - 所以这显然限制了我的选择.很抱歉没有提及,我不知道它有这么多的功能.
其次,让我们做到这一点非常简单.
假设我有一个名为'myfile.binary'的二进制文件,其中包含十六进制的五字节内容'4C53535353' - 这相当于文件中单独的字母"L和4xS"的ascii表示.
如果我做:
f = open('myfile.binary', 'rb')
contents = f.read(5)
Run Code Online (Sandbox Code Playgroud)
内容应该(来自Sven Marnach的答案)保存一个五字节的不可变字符串.
仅使用Python 2.4工具,如何将'contents'中的4 S更改为任意整数值?即给我一行代码,可以使字节索引内容[1-4]包含值为12345678910的32位整数'myint'.
hoc*_*chl 10
你需要的是这个功能:
struct.pack_into(fmt, buffer, offset, v1, v2, ...)
Run Code Online (Sandbox Code Playgroud)
它位于顶部附近的http://docs.python.org/library/struct.html上.
示例代码:
import struct
import ctypes
data=ctypes.create_string_buffer(10)
struct.pack_into(">i", data, 5, 0x12345678)
print list(data)
Run Code Online (Sandbox Code Playgroud)
类似的帖子: Python:如何使用struct.pack_into将不同类型的数据打包到字符串缓冲区中
编辑:添加了Python 2.4兼容的示例:
import struct
f=open('myfile.binary', 'rb')
contents=f.read(5)
data=list(contents)
data[0:4]=struct.pack(">i", 0x12345678)
print data
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23326 次 |
| 最近记录: |