gpt4 book ai didi

Python,如何将 32 位整数放入字节数组

转载 作者:太空狗 更新时间:2023-10-29 22:04:23 25 4
gpt4 key购买 nike

我通常在 C++ 中执行类似的操作,但我使用 Python 编写快速脚本时遇到了困难。

如果我有一个二进制列表(或者任何 python 存储“fread”结果的东西)。我可以通过以下方式访问其中的各个字节:buffer[0]、buffer[1] 等。

我需要更改字节 [8-11] 以容纳新的 32 位文件大小(阅读:那里已经有一个文件大小,我需要更新它)。在 C++ 中,我只会得到一个指向该位置的指针并将其转换为存储整数,但使用 Python 我突然意识到我不知道如何做这样的事情。

如何在特定位置更新缓冲区中的 4 个字节以保存 python 中的整数值?

编辑

我要添加更多,因为我似乎无法从解决方案中找出答案(尽管我可以看到它们在正确的轨道上)。

首先,我使用的是 python 2.4(无法升级,大公司的服务器)——这显然限制了我的选择。很抱歉之前没有提到,我不知道它还有那么多功能。

其次,让我们把它变得 super 简单。

假设我有一个名为“myfile.binary”的二进制文件,其中包含十六进制的五字节内容“4C53535353”——这等同于字母“L 和 4xS”在文件中单独存在的 ascii 表示。

如果我这样做:

f = open('myfile.binary', 'rb')
contents = f.read(5)

内容应该(来自 Sven Marnach 的回答)包含一个五字节的不可变字符串。

仅使用 Python 2.4 工具,如何将“内容”中的 4 S 更改为任意整数值? IE。给我一行代码,可以使字节索引内容 [1-4] 包含值为 12345678910 的 32 位整数“myint”。

最佳答案

你需要的是这个函数:

struct.pack_into(fmt, buffer, offset, v1, v2, ...)

它记录在顶部附近的 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)

类似的帖子: Python: How to pack different types of data into a string buffer using 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

关于Python,如何将 32 位整数放入字节数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7921705/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com