Computer Network: Cyclic Redundancy Check(CRC) in C Programming

Posted on:

A cyclic redundancy check (CRC) is an error-detecting code commonly used in digital networks and storage devices to detect accidental changes to raw data. Blocks of data entering these systems get a short check value attached, based on the remainder of apolynomial division of their contents; on retrieval the calculation is repeated, and corrective action can be taken against presumed data corruption if the check values do not match. 

Lets start...

#include<stdio.h>
#include<conio.h>
void main()

{
     int a[20],c[20],d[20],aux[20],r,i,j,l,in,flag,choice,key;
     clrscr();

     printf("\n ENTER THE SIZE OF DATA WORD : ");
     scanf("%d",&l);

     printf("\n ENTER THE DATA WORD : ");
     for(i=0; i<l; i++)
           scanf("%d",&a[i]);

     printf("\n ENTER THE NUMBER OF REDUNDANT BITS : ");
     scanf("%d",&r);

     printf("\n ENTER THE DIVISOR : ");
     for(i=0; i<(r+1); i++)
           scanf("%d",&d[i]);

     for(i=0; i<(l+r); i++){
           if(i<l) c[i]=a[i];
           else c[i]=0;
     }

     printf("\n\n ... GENERATOR MODULE ... \n");
     printf("\n\n THE INTERMEDIATE CODE WORD IS : ");
     for(i=0; i<(l+r); i++)
           printf("%d ",c[i]);

     for(i=0; i<(l+r); i++)
           aux[i]=c[i];

     for(i=0; i<l; i++){
           in=1;
           if(c[i]==1){
                for(j=i+1; j<(i+l); j++){
                     c[j]=c[j]^d[in];
                     in++;
                }
           }
           else{
                for(j=i+1; j<(i+l); j++)
                     c[j]=c[j]^0;
           }
     }

     printf("\n\n THE REMAINDER AFTER DIVISION IS : ");
     for(i=l; i<(l+r); i++)

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

     printf("\n\n SENDER CODE WORD : ");

     for(i=0; i<(l+r); i++){
           if(i<l) c[i]=aux[i];

           printf("%d ",c[i]);
     }

     printf("\n\n\n PRESS 1 IF YOU WANT TO CHANGE A BIT OR 0 TO CONTINUE : ");
     scanf("%d",&choice);

     if(choice==1){
           printf("\n\n ENTER THE BIT YOU WANT TO CHANGE :");
           scanf("%d",&key);
           for(i=0; i<(l+r); i++){
                if(i==(key-1)){
                     if(c[key-1]==0) c[key-1]=1;
                     else c[key-1]=0;
                }
           }

           printf("\n\n\n CODE WORD AFTER ERROR : ");
           for(i=0; i<(l+r); i++)
                printf("%d ",c[i]);
     }

     else printf("\n\n\n NO ERROR INSERTED IN CODE WORD... ");
     printf("\n\n\n\n ... CHECKER MODULE ... ");
     for(i=0; i<l; i++){
           in=1;
           if(c[i]==1){
                for(j=i+1; j<(i+l); j++){
                     c[j]=c[j]^d[in];
                     in++;
                }
           }

           else{
                for(j=i+1; j<(i+l); j++)
                     c[j]=c[j]^0;
           }
     }

     printf("\n\n\n THE SYNDROME ARRAY IS : ");
     for(i=l; i<(l+r); i++)
           printf("%d ",c[i]);
     flag=0;
     for(i=l; i<(l+r); i++){
           if(c[i]!=0){
                flag=1;
                break;
           }
     }

     if(flag==1) printf("\n\n\n ERROR DETECTED !!!");
     else printf("\n\n\n NO ERROR FOUND");

     getch();
}

To learn its theory part please visit on the link below:


No comments:

Post a comment

< >