将位写入二进制文件

问题描述

您可以将其视为int,然后按以下方式创建4个字节:

>>> bits = "10111111111111111011110"
>>> int(bits[::-1], 2).to_bytes(4, 'little')
b'\xfd\xff=\x00'

解决方法

我有23位表示为字符串,并且需要将此字符串作为4个字节写入二进制文件。最后一个字节始终为0。以下代码有效(Python
3.3),但感觉不太好(我对Python和编程很陌生)。您有任何改善技巧吗?似乎for循环可能有用,但是如何在循环中进行切片而不出现IndexError?请注意,当我将位提取到一个字节中时,我会反转位顺序。

from array import array

bin_array = array("B")
bits = "10111111111111111011110"    #Example string. It's always 23 bits
byte1 = bits[:8][::-1]
byte2 = bits[8:16][::-1]
byte3 = bits[16:][::-1]
bin_array.append(int(byte1,2))
bin_array.append(int(byte2,2))
bin_array.append(int(byte3,2))
bin_array.append(0)

with open("test.bnr","wb") as f:
    f.write(bytes(bin_array))

# Writes [253,255,61,0] to the file