www.pudn.com > hamming.rar > mian.c


#include 
 
typedef struct { 
	unsigned bit0:1; 
	unsigned bit1:1; 
	unsigned bit2:1; 
	unsigned bit3:1; 
	unsigned bit4:1; 
	unsigned bit5:1; 
	unsigned bit6:1; 
	unsigned bit7:1; 
}CharBits; 
 
typedef union { 
	CharBits bits; 
	unsigned char byte; 
}bytes; 
 
unsigned char coder(unsigned char codes) 
{ 
   bytes coders; 
   coders.byte=codes&0x0f; 
   coders.byte=coders.byte<<3; 
   coders.bits.bit2=((coders.bits.bit6+coders.bits.bit5)%2+coders.bits.bit4)%2; 
   coders.bits.bit1=((coders.bits.bit5+coders.bits.bit4)%2+coders.bits.bit3)%2; 
   coders.bits.bit0=((coders.bits.bit6+coders.bits.bit5)%2+coders.bits.bit3)%2; 
   return coders.byte; 
} 
 
 
unsigned char encoder(unsigned char encodes,unsigned char * codes) 
{ 
  bytes encoders,cas; 
 
  encoders.byte=encodes&0x7f; 
  cas.byte=0; 
  cas.bits.bit2=(((encoders.bits.bit6+encoders.bits.bit5)%2+encoders.bits.bit4)%2+encoders.bits.bit2)%2;  //s1 
  cas.bits.bit1=(((encoders.bits.bit5+encoders.bits.bit4)%2+encoders.bits.bit3)%2+encoders.bits.bit1)%2;  //s2 
  cas.bits.bit0=(((encoders.bits.bit6+encoders.bits.bit5)%2+encoders.bits.bit3)%2+encoders.bits.bit0)%2;  //s3 
  if(cas.byte==0){ 
      *codes=encoders.byte>>3; 
	  return 0; 
  } 
  else { 
   switch(cas.byte) 
   { 
     case 0x03: 
	     encoders.bits.bit3=~encoders.bits.bit3; 
	     break; 
	 case 0x06: 
         encoders.bits.bit4=~encoders.bits.bit4; 
	     break; 
     case 0x07: 
         encoders.bits.bit5=~encoders.bits.bit5; 
	     break; 
	 case 0x05: 
		 encoders.bits.bit5=~encoders.bits.bit5; 
	     break; 
     default: 
		 ; 
   } 
     *codes=encoders.byte>>3; 
	  return 1; 
  } 
 
} 
 
void main() 
{ 
bytes a,b; 
 
char n,m; 
a.byte=0xf5; 
 
	    printf("\na.chars =0x%x\n",a.byte); 
		printf("a.bits.bit0 =%d\n",a.bits.bit0); 
		printf("a.bits.bit1 =%d\n",a.bits.bit1); 
		printf("a.bits.bit2 =%d\n",a.bits.bit2); 
		printf("a.bits.bit3 =%d\n",a.bits.bit3); 
		printf("a.bits.bit4 =%d\n",a.bits.bit4); 
		printf("a.bits.bit5 =%d\n",a.bits.bit5); 
		printf("a.bits.bit6 =%d\n",a.bits.bit6); 
		printf("a.bits.bit7 =%d\n",a.bits.bit7); 
 
		n=coder(0x06); 
		 printf("\nthe origin coders =0x06\t the hamming coders  =0x%x\n",n); 
		 n=n|0x04; 
         printf("the hamming coders with one mistake  =0x%x\n",n);  
		 if(encoder(n,&m)){ 
           	printf("one misstake found\t"); 
            printf("the right coders should be=0x%x\n",m); 
		 } 
         else { 
           	printf("NO misstake found!!\t"); 
            printf("the right coders  =0x%x\n",m); 
		 } 
}