计算CRC循环校验码的简单C语言实现

期末复习做计网题库,没给CRC题的答案,自己又老算错。。。

#include <stdio.h>
#include <string.h>

int data[30]; // 数据
int poly[30]; // 生成式

int main(){
    char str[30];
    // 输入数据
    scanf("%s", str);
    int data_len = strlen(str);
    for (int i = 0; i < data_len; i++){
        data[i] = str[i] - '0';
    }
    // 输入生成式
    scanf("%s", str);
    int crc_len = strlen(str);
    for (int i = 0; i < crc_len; i++){
        poly[i] = str[i] - '0';
    }
    // 补0
    for (int i = 0; i < crc_len-1; i++){
        data[data_len+i] = 0;
    }
    // 模2除法
    for (int i = 0; i < data_len;){
        int start = i;
        for (int j = 0; j < crc_len; j++){
            data[start+j]^=poly[j];
        }
        // 去中间结果的头部0,对齐除数
        while (data[start] == 0)
            start++;
        i = start;
    }

    // 输出余数
    for (int i = data_len; i < data_len+crc_len-1; i++){
        printf("%d", data[i]);
    }

}
posted @ 2025-01-12 15:40  丘狸尾  阅读(32)  评论(0)    收藏  举报