Humming Code Receiver
#include<stdio.h>
#include<fcntl.h>
main()
{
int fd,i,ind;
char data[11],ch;
if((fd=open("testfile",O_RDONLY))<=0)
perror("File open failed");
while(1)
{
if((i=read(fd,data,11))<=0)
break;
for(i=10;i>=0;i--)
{
printf("%c",data[i]);
}
hammingCode(data);
ind=8;
for(i=0;i<11;i++)
{
if(i!=0 && i!=1 && i!=3 && i!=7)
{
if(data[i]=='1')
{
ch=setBit(ch,ind--);
}
else
{
ch=unSetBit(ch,ind--);
}
}
}
ch=unSetBit(ch,1);
printf("%c",ch);
printf("\n");
}
}
void displayBit(char ch)
{
int no=128;
int i;
for(i=0;i<8;i++)
{
if((no&ch)>0)
printf("1");
else
printf("0");
no=no>>1;
}
}
char setBit(char ch,int pos)
{
int no=128;
no=no>>(pos-1);
return ch|no;
}
char unSetBit(char ch,int pos)
{
int no=128;
no=no>>(pos-1);
no=~no;
return ch&no;
}
void hammingCode(char data[])
{
int one=0,two=0,three=0,four=0,i;
for(i=1;i<=11;i++)
{
if((i==1 || i==3 || i==5 || i==7 || i==9 || i==11) && (data[i-1]=='1'))
{
one++;
}
if((i==2 || i==3 || i==6 || i==7 || i==10 || i==11) &&(data[i-1]=='1'))
{
two++;
}
if((i==4 || i==5 || i==6 || i==7) && (data[i-1]=='1'))
{
three++;
}
if((i==8 || i==9 || i==10 || i==11) && (data[i-1]=='1'))
{
four++;
}
}
if(one%2==0 && two%2==0 && three%2==0 && four%2==0)
printf("\tValid Data - \t");
else
{
int pos=0;
if(one%2!=0)
{
pos++;
}
if(two%2!=0)
{
pos+=2;
}
if(three%2!=0)
{
pos+=4;
}
if(four%2!=0)
{
pos+=8;
}
printf("Error detected at bit %d",pos);
if(data[pos]==0)
data[pos]='1';
else
data[pos]='0';
printf("\nCorrected Data is: ");
}
}
Humming Code Sender
#include<stdio.h>
#include<fcntl.h>
void displayBit(char ch);
char* hammingCode(char ch);
char getBit(char ch,int pos);
main()
{
int fd,fd1,i,j;
char ch,*data;
if((fd=open("testfile",O_WRONLY))<=0)
perror("File open failed");
if((fd1=open("input.txt",O_RDONLY))<=0)
perror("File open failed");
while(1)
{
if((i=read(fd1,&ch,1))<=0)
break;
if(ch==10)
break;
printf("\nchar is: %c -",ch);
displayBit(ch);
data=hammingCode(ch);
printf("\n\nSender\n:");
for(i=10;i>=0;i--)
{
printf("%c",data[i]);
}
if((i=write(fd,data,11))<=0)
break;
free(data);
}
}
void displayBit(char ch)
{
int no=128;
int i;
for(i=0;i<8;i++)
{
if((no&ch)>0)
printf("1");
else
printf("0");
no=no>>1;
}
}
char getBit(char ch,int pos)
{
int no=128;
no=no>>(pos-1);
if((no&ch)>0)
return '1';
else
return '0';
}
char* hammingCode(char ch)
{
char *data=(char *)malloc(sizeof(char)*11);
int one=0,two=0,three=0,four=0,i;
data[0]='0'; //1st
data[1]='0'; //2nd
data[2]=getBit(ch,8);
data[3]='0'; //4th
data[4]=getBit(ch,7);
data[5]=getBit(ch,6);
data[6]=getBit(ch,5);
data[7]='0'; //8th
data[8]=getBit(ch,4);
data[9]=getBit(ch,3);
data[10]=getBit(ch,2);
for(i=1;i<=11;i++)
{
if((i==1 || i==3 || i==5 || i==7 || i==9 || i==11) && (data[i-1]=='1'))
{
one++;
}
if((i==2 || i==3 || i==6 || i==7 || i==10 || i==11) &&(data[i-1]=='1'))
{
two++;
}
if((i==4 || i==5 || i==6 || i==7) && (data[i-1]=='1'))
{
three++;
}
if((i==8 || i==9 || i==10 || i==11) && (data[i-1]=='1'))
{
four++;
}
}
if(one%2!=0)
data[0]='1';
if(two%2!=0)
data[1]='1';
if(three%2!=0)
data[3]='1';
if(four%2!=0)
data[7]='1';
return data;
}