www.pudn.com > hamming.rar > mian.c
#includetypedef 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); } }