📄 mian.c
字号:
#include<stdio.h>
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);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -