我通常在C++中执行类似这样的操作,但是我使用python编写了一个快速脚本,并且遇到了一堵墙。Python中,如何将32位整数放入字节数组中
如果我有一个二进制列表(或任何python存储“fread”的结果)。我可以访问其中的单个字节:缓冲区[0],缓冲区[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)
内容应该(从斯文Marnach的答案)举行的五字节的字符串不可改变。
只能使用Python 2.4的设施,我怎么能把'内容'中保存的4个S更改为任意整数值?即给我一行代码,可以使字节索引的内容[1-4]包含值为12345678910的32位整数'myint'。
你不能因为字符串修改内容是不变的...你可以创造吃了一个新的字符串,或者使用像bytearray这样的可变容器。 – hochl
谢谢,我很乐意创建一个新的字符串或字节数组,如果是这样的话。我怎么能创建一个可修改的字节数组与相同的contnets,并更新范围[1-4],以等于我的整数的二进制表示? –
我在下面扩展了我的发帖,并包含了Python 2.4的一个工作示例:-) – hochl