我有一个由~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个字节)编码。
有什么建议吗?
答案 0 :(得分:2)
您可以使用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)]
你必须为最后一个块做一些特殊的套管,因为它可能不是一个完整的字节,可以由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)