Ich habe 23 Bits als String dargestellt, und ich muss diese Zeichenfolge in eine Binärdatei als 4 Bytes schreiben. Das letzte Byte ist immer 0. Der folgende Code funktioniert (Python 3.3), aber er fühlt sich nicht sehr elegant an (ich bin ziemlich neu in Python und Programmierung). Hast du irgendwelche Tipps, um es besser zu machen? Es scheint, dass eine For-Schleife nützlich sein könnte, aber wie mache ich das Slicing innerhalb der Schleife, ohne einen IndexError zu bekommen? Beachten Sie, dass, wenn ich die Bits in ein Byte extrahiere, ich die Bit-Reihenfolge umkehre.Schreiben von Bits in eine Binärdatei
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 Ich liebte das. Schade, Python2.7 hat dieses Feature nicht –
@ Jon Das ist ... erstaunlich. Ist es möglich, in die andere Richtung zu gehen? So etwas wie: 'int.from_bytes (b '\ xfd \ xff = \ x00', 'little')' und hole '" 10111111111111111011110 "' – Olav
@Olav, yup - formatiere es passend: 'format (int.from_bytes (b ') \ xfd \ xff = \ x00 ',' little '),' 023b ') [:: - 1] ' –