Первый запуск

This commit is contained in:
KuzarinM
2026-05-02 18:33:38 +03:00
commit cb55eaef01
51 changed files with 2127373 additions and 0 deletions

View File

@@ -0,0 +1,36 @@
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