我有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
+1我喜欢这个。太糟糕了Python2.7没有这个功能 –
@Jon那真是太神奇了。走另一条路可行吗?例如:'int.from_bytes(b'\ xfd \ xff = \ x00','little')'并获得'“10111111111111111011110”' – Olav
@Olav,yup - 适当格式化:'format(int.from_bytes(b' \ xfd \ xff = \ x00','little'),'023b')[:: - 1]' –