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
Post a Comment