阅读( 241 ) 我要纠错

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;

 }


-----

CRC16查表-C2.png

×