#include "stdio.h"
/*得到对照表 TAB_LEN 对照表长度 ALPHA 多项式系数*/
#define TAB_LEN 256
#define ALPHA 0x09
int table_gen8(unsigned char *buf){
unsigned int alpha = ALPHA; //x^7+x^3+1
int i,j;
unsigned char tmp;
for(i=0;i<TAB_LEN;i++){
tmp = i;
for(j=0;j<8;j++){
if(tmp & 0x80)
tmp ^= alpha;
tmp <<= 1;
}
buf[i] = tmp>>1; /*余数为7bit,计算中用了8bit,结尾多一位0要去掉*/
}
return 0;
}
/*start校验开始位 buff数据 len长度 table对照表*/
unsigned char get_crc7(unsigned char start, const unsigned char *buff, int len, unsigned char *table){
unsigned char accu = start;
unsigned int i= 0;
for (i=0; i < len; i++) {
accu = table[(accu << 1) ^ buff[i]];
}
return accu;
}
int main(void){
unsigned char data[TAB_LEN] = {0};
int i,j;
printf("CRC7 table:\n");
table_gen8(data);//得到对照表
const unsigned char testdat[10] = "012345";
unsigned char result;
result = get_crc7(0, testdat, 6, data);//计算校验和
printf("get_crc7:0x%02x\n",result);
return 0;
}