C语言-MODBUS的CRC16位校验函数

unsigned short CRC16_MODBUS(unsigned char *puchMsg, unsigned int usDataLen) 
{
   unsigned short wCRCin = 0xFFFF;  
   unsigned short wCPoly = 0x8005;  
   unsigned char wChar = 0;  
   while (usDataLen--)     
   {  
       wChar = *(puchMsg++);  
       InvertUint8(&wChar, &wChar);  
       wCRCin ^= (wChar << 8); 
       for(int i = 0; i < 8; i++)  
       {  
           if(wCRCin & 0x8000) 
           {
               wCRCin = (wCRCin << 1) ^ wCPoly;  
           }
           else  
           {
               wCRCin = wCRCin << 1; 
           }            
       }  
   }  
   InvertUint16(&wCRCin, &wCRCin);  
   return (wCRCin) ;
 }

你可能感兴趣的:(算法,工具,算法,c语言)