13.2、C语言非查表法
#include <stdio.h>
#define PLOY 0xa001 //0x8005 反转
unsigned short crc16(int *data,int size) {
unsigned short crc = 0x0;
int data_t ;
int i = 0; int j = 0;
if(data ==NULL){
return 0;
}
for(j=0;j<size;j++){
data_t = *data++;
crc = (data_t ^ (crc));
for(i=0;i<8;i++){
if((crc&0x1)==1){ crc = (crc>>1) ^ PLOY;
}
else{ crc >>= 1;
}
}
}
return crc;
}
int main(int argc,char **argv) {
int a[]={0x01,0x02,0x03,0x04,0x05,0x06,0xFF};
printf("%x\n",crc16(a,sizeof(a)/sizeof(int)));
return 0;
}
-----