📄 crc8.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 + -