Python-在二进制文件中写入长串位

标签 python arrays ascii binaryfiles

我有一个由约 75 000 位组成的字符串(非常长的字符串)。

我想创建一个由该位序列表示的二进制文件。 我做了以下代码:

byte_array = bytearray(global_bits_str.encode())
with open('file1.bin', 'wb') as f:
    f.write(byte_array)

但是当我检查 file1.bin 时,我可以看到它由 75 000 字节而不是 75 000 位组成。我猜它已经在文件中以 ascii 编码(每比特 1 字节)。

有什么建议吗?

最佳答案

您可以使用 int 内置函数将二进制字符串转换为整数序列,然后将其传递给 bytearray

一个字节的示例:

>>> int('10101010', 2)
170
>>> bytearray([170])
bytearray(b'\xaa')

分割字符串:

chunks = [bit_string[n:n+8] for n in range(0, len(bit_string), 8)]

您必须对最后一个 block 进行一些特殊的大小写,因为它可能不是一个完整的字节,这可以通过 ljust 在左侧用零填充来完成。

放在一起:

def to_bytes(bits, size=8, pad='0'):
    chunks = [bits[n:n+size] for n in range(0, len(bits), size)]
    if pad:
        chunks[-1] = chunks[-1].ljust(size, pad)
    return bytearray([int(c, 2) for c in chunks]

# Usage:
byte_array = to_bytes(global_bits_str)

关于Python-在二进制文件中写入长串位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47311449/

相关文章:

python - web2py: 全局名称 'crud' 未定义

python - 使用 Beautifulsoup 从网站中提取数据

c - 在 C 中打乱泛型数组

javascript - 切片数组中的节点

utf-8 - Unicode 和 ASCII 运算符之间的区别

c++ - 编码可执行文件

SQL中集合的Python字典

python - 在 pandas 中分割时间戳日期

java - 如何返回取消引用的数组?

php - 将 UTF-8 字符作为 Ascii 写入文件