python - 如何在 Python 中编写位长度不是 8 的倍数的二进制文件?

标签 python binaryfiles binary-data bitstring

我正在开发一个为项目生成虚拟二进制文件的工具。我们有一个描述真实二进制文件的规范,这些文件是从具有不同位长度的值流创建的。我使用输入和规范文件来创建值列表,并使用 bitstring 库的 BitArray 类来转换值并将它们连接在一起。

问题是值的长度加起来并不总是完整的字节,我需要文件按原样包含这些位。通常我可以使用 BitArray.tofile(),但该方法会自动在末尾用零填充文件。

还有其他方法可以将位写入文件吗?

最佳答案

显然原始二进制文件只能存储字节,即 8 位的倍数。

当您需要存储数据(位)和元数据(关于数据的数据,在本例中为位长度)时,有两种方式:

  • 选择或发明一种文件格式,例如具有长度和 hexdump 的 JSON 结构(不节省空间,只是一个例子):

    {
      "length": 11,
      "data": "c3a"
    }
    
  • 使用 sidecar file元数据文件。这种情况不太常见。

关于python - 如何在 Python 中编写位长度不是 8 的倍数的二进制文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56098610/

相关文章:

python - 从 C++ 自动生成 python 模块的 Tensorflow 源代码

c - 在条件语句中使用二进制文件中的数据

java - 使用Java以二进制格式将图像存储在数据库中

java - 如何检查文件是否为纯文本?

python - 如何在python中将列表写入文件

javascript - 使用 Flask : Method Not Allowed error 405 在 Javascript 和 Python 之间调用

python - 测试调用重写方法的类中的方法

c - 在字符串写入二进制文件期间写入不需要的字符

C++ - 将 double 序列化为小端二进制文件

java - 如何向文件中写入不是 8 倍数的位数