class BitWriter: """ Класс для накопления бит и их конвертации в байтовую строку. """ def __init__(self): self.value = 0 self.bit_count = 0 def add_bits(self, val, length): """ Добавляет length бит из числа val в поток. """ # Сдвигаем текущее накопленное значение влево на length self.value = (self.value << length) | (val & ((1 << length) - 1)) self.bit_count += length def get_bytes(self): """ Возвращает накопленные биты в виде объекта bytes. Если количество бит не кратно 8, дополняет нулями справа (до полного байта). """ if self.bit_count == 0: return b'' # Вычисляем количество необходимых байт num_bytes = (self.bit_count + 7) // 8 # Сдвигаем значение влево, чтобы заполнить последний байт, если он не полон # Например, если есть 4 бита 1010, нам нужно получить байт 10100000 (0xA0) shift_remainder = (num_bytes * 8) - self.bit_count final_value = self.value << shift_remainder return final_value.to_bytes(num_bytes, byteorder='big')