Files
2026-05-02 18:33:38 +03:00

34 lines
1.5 KiB
Python

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')