C program for calculating IP header checksum

#include<stdio.h> /*program for calculating header checksum*/
int main()
{ int i=0, binary_index=0, temp, j, b_temp[17],  binary[17];
unsigned long int sum=0; printf("\nEnter packet data\n");
for(i=0;i<10;i++)
{ scanf("%x",&temp);
sum=sum+temp; }
//finding binary of sum
while( sum!=0 )
{ int bit;
bit=sum%2; binary[binary_index]=bit;
binary_index++;  printf("  %d ", bit);
sum=sum/2; }
//reversing
for(i=0;i<=binary_index;i++)
{ b_temp[i]=binary[i]; }
j=0;
for(i=binary_index;i>=0;i--)
{ binary[j] = b_temp[i]; j++; }
printf("\n\nAns before adding carry bit:\n");
for(i=0;i<=binary_index;i++)
{ printf(" %d",binary[i]);  }
printf("\n\nAns after adding carry bit:\n");
if(binary_index>16)
{
// adding carry bit
temp=1;
 for(i=binary_index;i>1;i--)
 { if(binary[i]==1 && temp==1) {binary[i]=0;temp=1;}
 else if(binary[i]==0 && temp==1) {binary[i]=1;temp=0;break;}
 else if(binary[i]==0 && temp==0) {binary[i]=0;temp=0;break;}
 else if(binary[i]==1 && temp==0) {binary[i]=1;temp=0;break;}
 }
for(i=2;i<=binary_index;i++)
{ printf(" %d",binary[i]);  }
// complementing ans
for(i=0;i<=binary_index;i++)
{ if(binary[i]==0)
binary[i]=1;
 else if(binary[i]==1)
 binary[i]=0; }
printf("\n\nAns after 1's complement:\n");
for(i=2;i<=binary_index;i++)
{ printf(" %d",binary[i]);  }
}
else
{ // complementing ans
for(i=0;i<=binary_index;i++)
{ if(binary[i]==0)
 binary[i]=1;
 else if(binary[i]==1)
 binary[i]=0; }
printf("\n\nAns after 1's complement:\n");
for(i=2;i<=binary_index;i++)
{ printf(" %d",binary[i]);  }
}}

Output of Program :
student@ccf58-OptiPlex-755:~$ gcc ip-header.c
student@ccf58-OptiPlex-755:~$ ./a.out
Enter packet data
1500
0028
1000
2600
C90A
0101
C90A
010F
0000
0000
0   0   1   1   0   0   1   0   1   1   1   1   1   0   1   1   1

Ans before adding carry bit:
1 1 1 0 1 1 1 1 1 0 1 0 0 1 1 0 0

Ans after adding carry bit:
1 1 0 1 1 1 1 1 0 1 0 0 1 1 0 1

Ans after 1's complement:
0 0 1 0 0 0 0 0 1 0 1 1 0 0 1 0

Comments

Popular posts from this blog

MATLAB code for Circular Convolution using Matrix method

Positive number pipe in angular 2+