6ЛР
.docxМинистерство цифрового развития, связи и массовых коммуникаций РФ
ордена Трудового Красного Знамени федеральное государственное
бюджетное образовательное учреждение высшего образования
«МОСКОВСКИЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ СВЯЗИ И
ИНФОРМАТИКИ»
Кафедра «Сетевые информационные технологии и сервисы»
Лабораторная работа № 6
по дисциплине «Мультимедийные информационные системы»
Выполнил:
студент группы БФИ2203
Мячина Л. А.
Проверил:
Гадасин Д. В
Москва, 2025 г.
Задание на лабораторную работу
Первую строку из задания 6 преобразовать в код.
Для данной строки
2.1. Найти контрольную сумму с использованием полинома CRC-16
x16+x15+x2+1
2.2.
Найти контрольную сумму с использованием
полинома
CRC-32
𝑥32+𝑥26+𝑥23+𝑥22+𝑥16+𝑥12+𝑥11+𝑥10+𝑥8+𝑥7+𝑥5+𝑥4+𝑥2+𝑥+1
Провести проверку
Оформить решение
Выполнение работы:
Листинг 1 - Код на Python для решения задачи
import struct
def bin_to_bytes(binary_string):
padding = 8 - (len(binary_string) % 8)
if padding != 8:
binary_string = '0' * padding + binary_string
byte_array = bytearray()
for i in range(0, len(binary_string), 8):
byte = binary_string[i:i+8]
byte_array.append(int(byte, 2))
return bytes(byte_array)
def crc16(data, poly=0x8005, init=0x0000, xor_out=0x0000):
crc = init
for byte in data:
crc ^= byte << 8
for _ in range(8):
if crc & 0x8000:
crc = (crc << 1) ^ poly
else:
crc <<= 1
crc &= 0xFFFF
return crc ^ xor_out
def crc32(data, poly=0x04C11DB7, init=0xFFFFFFFF, xor_out=0xFFFFFFFF, reflect_in=True, reflect_out=True):
def reflect(data, bits):
reflection = 0
for i in range(bits):
if data & (1 << i):
reflection |= 1 << (bits - 1 - i)
return reflection
table = [0] * 256
for i in range(256):
crc = i
if reflect_in:
crc = reflect(crc, 8)
crc <<= 24
for _ in range(8):
if crc & 0x80000000:
crc = (crc << 1) ^ poly
else:
crc <<= 1
if reflect_in:
crc = reflect(crc, 32)
table[i] = crc & 0xFFFFFFFF
crc = init
for byte in data:
if reflect_in:
byte = reflect(byte, 8)
idx = ((crc >> 24) ^ byte) & 0xFF
crc = ((crc << 8) ^ table[idx]) & 0xFFFFFFFF
if reflect_out:
crc = reflect(crc, 32)
return crc ^ xor_out
binary_string = "1110101010011110010110101110011101101011110001001110110101101000000010001010111101101101001100110101111100000010011011011011111100010110001101001101001000111111000101101101110110101110110101011100"
data_bytes = bin_to_bytes(binary_string)
print("CRC-16:", format(crc16(data_bytes)))
print("CRC-32:", format(crc32(data_bytes)))
Рисунок 1 – Результат работы программы
Рисунок 2 – Проверка работы программы (1)
Рисунок 2 – Проверка работы программы (2)
