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

📄 crc8.cpp

📁 并行计算8位CRC
💻 CPP
字号:
/********************************************************************************\
**功能:实现8位的CRC的计算,输入为一个一个字节的数据和数据的字节数
**      输出数据包括数据和8位的CRC码,与CRC16的区别是传递参数时
**      要把整个生成多项式(包括最高位的1)传递过去
**作者:田玉利
**修改日期         人员           版本               原因
**20090217        田玉利          1.0                创建
********************************************************************************/
#include <stdafx.h>
#include <stdio.h>

int crctable_8[256] ;
int getcrc_8(int *pdata, int nlength) ;
void mk_crctable(int genpoly) ;

void main()
{
	int crc_8 ;
	int genpoly = 0x131 ;
    int *pdata ;
	int nlength = 2 ;
	int data = 0xeaaa ;
    pdata = &data ;

	mk_crctable ( genpoly ) ;
	crc_8 = getcrc_8( &data, nlength) ;
    printf( " the crc_8 of %d is %0x \n ", data, crc_8 ) ;

}

int getcrc_8(int *pdata, int nlength)
//函数功能:计算数据流*pdata的8位CRC校验码,数据流长度为nlength
{
    int crc_8 = 0x00 ;    // 初始化
    unsigned char *bdata ;
    bdata = ((unsigned char*)pdata) +nlength-1; //高位数据放在高位,但是指针赋的是低地址的值,
                                                //所以要想让它指向最高的位的地址
	unsigned char ll ;
	
	while(nlength>0)
	{
		ll=((unsigned char)(crc_8&0xff) )^ (*bdata) ;
  	    printf ( "the value is %d\n",ll );
        crc_8 = crctable_8[crc_8 ^ (*bdata)]; //crctable_8表由函数mk_crctable生成
        nlength--;
        bdata--;       //指向下一个字节
    }

    return crc_8;
}

void mk_crctable(int genpoly)
//genpoly为生成多项式,CRC8为0x131
//注意,低位先传送时,生成多项式应反转(低位与高位互换)。
{
int crc_8=0;
int i,j,k;

for(i=0,k=0;i<256;i++,k++)
{
      crc_8 = i;
      for(j=8;j>0;j--)
      {
         if( crc_8&0x80 )
             crc_8 = (crc_8<<=1)^genpoly;
         else
             crc_8 <<= 1;
      }
      crctable_8[k] = crc_8;
	  printf("crc8 of %d is %0x\n",k,crc_8);
}
}

⌨️ 快捷键说明

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