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

📄 crc.txt

📁 这一个16位的CRC校验的源码
💻 TXT
字号:
/*###################################################################

			发送端CRC-CCITT校验(加16位校验比特)以及接收端检验
						 
   CRC-CCITT(D)=D^16+D^12+D^5+1
   ##################################################################*/
void crc_ccitt( int *transport_block,       //传输块输入
		  int transport_block_size)   //加CRC校验比特(16)后的传输块大小
{   int CRCccitt,i,j;
   
    int temp,crc_register[16];
    
    CRCccitt=16;
    
    for(i=0;i<CRCccitt;i++)
	{
       crc_register[i]=0;         //给各个寄存器赋初值0
	}

    for (i=0;i<transport_block_size-CRCccitt;i++)
	{
       temp=(transport_block[i]+crc_register[CRCccitt-1])%2;
       for(j=CRCccitt-1;j>0;j--)
	   {
    	   crc_register[j]=crc_register[j-1];
	   }
       crc_register[0]=temp;
       crc_register[5]=(temp+crc_register[5])%2;
       crc_register[12]=(temp+crc_register[12])%2;      
	}

    for (i=0;i<16;i++)
	{
       transport_block[transport_block_size-1-i]=(crc_register[i]+1)%2;//校验位取反
	}
    return;  //输出的数据块长度为原传输块长度与CRCccitt之和

}


//---------------------------------------------------------------------/

//接收端检验  
 int crcccitt_value( int *transport_block,int transport_block_size)						   
{
    int temp,buffer,t[200];
	unsigned int reg=0;
	int i;
    
    for (i=0;i<transport_block_size;i++)
	{
       t[i]=transport_block[i];
	}
    for (i=0;i<transport_block_size;i++)
	{
       transport_block[i]=t[transport_block_size-1-i];
	}
	
	for (i=0;i<16;i++)
	{
       transport_block[transport_block_size-1-i]=(transport_block[transport_block_size-1-i]+1)%2;
	}//接收端校验位取反
    
    for (i=0;i<transport_block_size;i++)
	{
		temp=(transport_block[i]+(reg&0x01))%2;//reg[15]与信息位模二加

		reg=(unsigned int)((reg>>1)|(temp<<15));//循环右移,reg[4]变成reg[5]

		buffer=(((reg>>10)&0x01)+temp)%2;//取reg[5]与输出位模二加,其结果存入
		reg=(unsigned int)((reg&0xfbff)|(buffer<<10));           //新reg[5]

		buffer=(((reg>>3)&0x01)+temp)%2;//取reg[12]与输出位模二加,其结果存入
		reg=(unsigned int)((reg&0xfff7)|(buffer<<3));           //新reg[12]
	}


    return reg; //输出CRCccitt校验值,若非全零则传输有误

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -