下面是16位crc校验的程序 typedef unsigned char uchar; typedef unsigned int uint; code uchar crcbuff [] = { 0x00,0x00,0x00,0x00,0x06,0x0d,0xd2,0xe3}; uint crc; // CRC 码 void main(void) { uchar *ptr; crc = 0; // CRC 初值 ptr = crcbuff; // 指向第一个Byte 数据 crc = crc16l(ptr,8); while(1); } uint crc16l(uchar *ptr,uchar len) // ptr 为数据指针,len 为数据长度 { uchar i; while(len--) { for(i=0x80; i!=0; i>>=1) { if((crc&0x8000)!=0) {crc<<=1; crc^=0x1021;} else crc<<=1; if((*ptr&i)!=0) crc^=0x1021; } ptr++; } return(crc); } 那个来回的异或1021是什么意思?? 谢谢! |