CRC Complete Code in C

Complete Explanation Video: 

File xor.h :


#include<stdio.h>

void xorBits(int* temp, int* poly, int start, int poly_len){
for(int i= 0 ; i < poly_len ; i++){
temp [ start + i] = temp[start + i] ^ poly[i];
}
}

void print(int* temp, int start, int end){
for(int j = start ; j < end ; j ++){
printf(" %d ", temp[j]);
}
printf("\n");
}

File crc.c

#include<stdio.h>
#include "verify.h"

int main(){
int data[] = { 1, 0, 0, 1, 0, 0, 1};
int data_len = 7;

int poly[] = { 1, 0 , 1, 1};
int poly_len = 4;

int temp[20];

for(int i = 0 ; i < data_len + poly_len -1 ; i++){
if(i < data_len){
temp[i] = data[i];
}else{
temp[i] = 0;
}
}

for(int i = 0 ; i < data_len ; i ++){
if ( temp[i] == 1){
xorBits(temp, poly, i, poly_len);
}
}

for(int i = 0 ; i < data_len ; i ++){
temp[i] = data[i];
}
printf(" CRC = ");
print(temp, 0, data_len + poly_len -1 );

temp[2] = 1;
printf(" Is error exist = %d", verify(temp, poly, data_len, poly_len));
return 0;
}

File verify.h:

#include<stdio.h>
#include "xor.h"

int verify(int* temp, int* poly, int data_len, int poly_len){
for(int i = 0 ; i < data_len ; i++){
if(temp[i] == 1){
xorBits(temp, poly, i, poly_len);
}
}

for(int j = data_len ; j < data_len + poly_len -1 ; j++){
if(temp[j] == 1){
return -1;
}
}
return 0;
}

Comments