⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mian.c

📁 自己写的一个汉明码编码和解码程序
💻 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 + -