Добавил:
У меня есть канал с приколами: t.me/urmipies_garbage Подпишитесь пж-пж!!!! Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

6 / crc_steps_32_check

.py
Скачиваний:
0
Добавлен:
02.09.2026
Размер:
3 Кб
Скачать
import csv

def mask_leading_zeros_for_display(bits_str: str):
    """
    Для отображения в Excel:
    ведущие '0' → пустые ячейки ''.
    Если строка вся нулевая — оставляем один 0.
    """
    bits = list(bits_str)
    i = 0
    while i < len(bits) and bits[i] == '0':
        bits[i] = ''
        i += 1
    if i == len(bits):
        bits[-1] = '0'
    return bits


def crc_check_to_csv(msg_with_crc: str,
                     poly_bits: str,
                     filename: str = "crc_check.csv"):
    """
    Проверка CRC:
    - Берём сообщение+CRC
    - Делим на полином
    - Никаких добавлений нулей!
    - Печатаем шаги деления в CSV (как в столбик)
    """
    work = list(msg_with_crc)
    total_len = len(work)
    n = len(poly_bits)

    rows = []

    # 1) первая строка — исходное число (сообщение + CRC)
    rows.append([""] + mask_leading_zeros_for_display("".join(work)))

    i = 0
    while i <= total_len - n:
        if work[i] == '1':

            # 2) полином со сдвигом
            poly_row = [""] + [""] * i + list(poly_bits) + [""] * (total_len - i - n)
            rows.append(poly_row)

            # 3) XOR
            for j in range(n):
                work[i + j] = str(int(work[i + j]) ^ int(poly_bits[j]))

            # 4) результат → следующее число
            after = "".join(work)
            rows.append([""] + mask_leading_zeros_for_display(after))

        i += 1

    # Остаток = последние (n-1) бит
    remainder = "".join(work[-(n - 1):])

    rows.append(["Остаток"] + list(remainder))
    rows.append(["Длина"] + [str(len(remainder))])

    with open(filename, "w", newline="", encoding="utf-8") as f:
        writer = csv.writer(f, delimiter=";")
        writer.writerows(rows)

    print(f"Файл сохранён: {filename}")
    print("Остаток:", remainder)


# ========================
#         ПРИМЕР
# ========================
if __name__ == "__main__":
    # твоя строка = сообщение + CRC (ДОЛЖНА быть готовая, конечная)
    msg = "11101010111111101111101100010100001000011111010110111011001110100001111100101111010101111110100110010101001111110001110111010011010011011000011100100111111101001111101101011010011101010110000"
    crc = "11101000100001010111101101010000"
    msg_with_crc = msg+crc

    # твой CRC-32 полином
    poly = "100000100110000010001110110110111"

    crc_check_to_csv(msg_with_crc, poly, "crc32_check.csv")
Соседние файлы в папке 6