У меня есть 23 бита, представленные в виде строки, и мне нужно записать эту строку в двоичный файл как 4 байта. Последний байт всегда равен 0. Следующий код работает (Python 3.3), но он не очень элегантен (я довольно новичок в Python и программировании). У вас есть какие-то советы по его улучшению? Кажется, что for-loop может быть полезен, но как сделать резку в цикле без получения 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')' и get '" 10111111111111111011110 "' – Olav
@Olav, yup - соответствующим образом его формат: 'format (int.from_bytes (b ' \ xfd \ xff = \ x00 ',' little '),' 023b ') [:: - 1] ' –