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

36 lines
1.4 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
class BitReader:
"""
Класс для чтение битов из байтовой строки (bytes).
"""
def __init__(self, data):
self.data = data
self.bit_pos = 0
self.total_bits = len(data) * 8
def read_bits(self, length):
"""
Считывает length бит и возвращает их как целое число.
"""
if self.bit_pos + length > self.total_bits:
raise ValueError(f"Недостаточно данных: запрошено {length}, осталось {self.remaining()}")
value = 0
# Читаем побитово (можно оптимизировать, но так надежнее для понимания)
for _ in range(length):
byte_index = self.bit_pos // 8
# В байте биты идут слева направо (7..0), где 7 - старший
bit_offset = 7 - (self.bit_pos % 8)
bit = (self.data[byte_index] >> bit_offset) & 1
value = (value << 1) | bit
self.bit_pos += 1
return value
def has_bits(self, length):
"""Проверяет, осталось ли достаточно бит для чтения."""
return self.bit_pos + length <= self.total_bits
def remaining(self):
return self.total_bits - self.bit_pos