python - 操作字节列表时使用 pack_into() 的替代方案?

标签 python binary struct

我正在将二进制文件读入列表并解析二进制数据。我使用 unpack() 将数据的某些部分提取为原始数据类型,并且我想编辑该数据并将其插入到原始字节列表中。使用pack_into()会很容易,除了我使用的是Python 2.4,并且 pack_into() 直到 2.5 才引入

有谁知道以这种方式序列化数据的好方法,以便我可以完成与 pack_into() 基本相同的功能?

最佳答案

你看过bitstring吗?模块?它的设计目的是使二进制数据的构造、解析和修改比直​​接使用 structarray 模块更容易。

它是专门为在位级别工作而设计的,但也可以在字节级别上工作。它还适用于 Python 2.4。

from bitstring import BitString
s = BitString(filename='somefile')

# replace byte range with new values
# The step of '8' signifies byte rather than bit indicies.
s[10:15:8] = '0x001122'

# Search and replace byte value with two bytes
s.replace('0xcc', '0xddee', bytealigned=True)

# Different interpretations of the data are available through properties
if s[5:7:8].int > 1000:
    s[5:7:8] = 1000

# Use the bytes property to get back to a Python string
open('newfile', 'wb').write(s.bytes)

存储在BitString中的底层数据只是一个数组对象,但具有一套全面的函数和特殊方法,使其易于修改和解释。

关于python - 操作字节列表时使用 pack_into() 的替代方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1133044/

相关文章:

c - 字符转二进制(ASCII)的递归函数

C 错误 - free() : invalid next size (fast)

c++ - 如何完全减少/简化分数 (C++)

c++ - 未定义模板的qt隐式实例化 'QList<VPNConnection>'

python - 二进制矢量化 pandas DataFrame 列

python - Tensorflow Eager 和 Tensorboard 图?

python - 如何将 ListNode 从 LeetCode 转换为常规列表?

c - 将 8 字节数字写入文件后如何读回?

python - 单击按钮后如何更改组合框中的变量值?

c - 如何将变量合并到位掩码中?