CRCv1.0
#include <iostream>
#include <iomanip>
using namespace std;
const int TAB_LEN = 256;
const int 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;
}
return 0;
}
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(int arge, const char *argv[]){
unsigned char data[TAB_LEN] = {0};
int i,j;
printf("CRC7 table:\n");
table_gen8(data);
for(i = 0; i < TAB_LEN/8; i++){
for(j = 0; j < 8; j++){
cout << "0x" << setfill('0') << setw(2) << hex << (unsigned int)(unsigned char)data[i*8+j] << " ";
}
cout << endl;
}
cout << endl;
/*Test*/
const unsigned char testdat[11] = "0123456789";
unsigned char result;
result = get_crc7(0,testdat,10,data);
cout << "get_crc7: 0x" << hex << (unsigned int)(unsigned char)result << endl;
return 0;
}