Crc

 #include <stdio.h> 

#include <string.h> 

 

void xor(char *a, char *b, int len) { 

    int i; 

    for (i = 0; i < len; i++) { 

        b[i] = (b[i] == a[i]) ? '0' : '1'; 

    } 

 

int main() { 

    char a[10], b[100], remainder[100]; 

    int m, n; 

 

    printf("\nEnter the polynomial: "); 

    scanf("%s", a); 

 

    printf("\nEnter the frame: "); 

    scanf("%s", b); 

 

    m = strlen(a); 

    n = strlen(b); 

 

    // Ensure the polynomial has no leading zeros 

    while (a[0] == '0' && m > 1) { 

        for (int i = 0; i < m - 1; i++) { 

            a[i] = a[i + 1]; 

        } 

        m--; 

    } 

 

    // Copy frame to remainder and append m-1 zeros to it 

    strcpy(remainder, b); 

    for (int i = n; i < n + m - 1; i++) { 

        remainder[i] = '0'; 

    } 

    remainder[n + m - 1] = '\0'; 

 

    // Polynomial division 

    for (int i = 0; i <= n; i++) { 

        if (remainder[i] == '1') { 

            xor(a, &remainder[i], m); 

        } 

    } 

 

    // Display the remainder (CRC) 

    printf("CRC: "); 

    for (int i = n; i < n + m - 1; i++) { 

        printf("%c", remainder[i]); 

    } 

    printf("\n"); 

 

    // Append CRC to the original frame 

    for (int i = n; i < n + m - 1; i++) { 

        b[i] = remainder[i]; 

    } 

    b[n + m - 1] = '\0'; 

 

    // Display the entire message with CRC at the end 

    printf("Message with CRC: %s\n", b); 

 

    return 0; 

}

Comments