我有一个由约 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/