Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

6ЛР

.docx
Скачиваний:
0
Добавлен:
02.08.2026
Размер:
329 Кб
Скачать

Министерство цифрового развития, связи и массовых коммуникаций РФ

ордена Трудового Красного Знамени федеральное государственное

бюджетное образовательное учреждение высшего образования

«МОСКОВСКИЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ СВЯЗИ И

ИНФОРМАТИКИ»

Кафедра «Сетевые информационные технологии и сервисы»

Лабораторная работа № 6

по дисциплине «Мультимедийные информационные системы»

Выполнил:

студент группы БФИ2203

Мячина Л. А.

Проверил:

Гадасин Д. В

Москва, 2025 г.

Задание на лабораторную работу

  1. Первую строку из задания 6 преобразовать в код.

  2. Для данной строки

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. Провести проверку

  2. Оформить решение

Выполнение работы:

Листинг 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)

Соседние файлы в предмете Мультимедийные информационные системы