安卓能用的modebus CRC16计算,附上对应的C语言的CRC16(转)

源:安卓能用的modebus CRC16计算,附上对应的C语言的CRC16

“源”即是原文地址,想了解作都更多文章及思想请移步到“源”。转过只是为了本人感兴趣的文章查找方便。

正文:

  最近写安卓串口通信需要用到modebus 的crc16通信,网上找了很多都是字符串的,我需要byte的,由于java没有无符号数,转换有点小麻烦,对着C一部一部测试

代码如下:

//java

int CRC16_Check(byte Pushdata[],int length)  
{  
    int Reg_CRC=0xffff; 
    int temp;
    int i,j;    
  
    for( i = 0; i<length; i ++)  
    {  
        temp = Pushdata[i];
        if(temp < 0) temp += 256; 
        temp &= 0xff;
        Reg_CRC^= temp;  
         
       for (j = 0; j<8; j++)  
       {  
           if ((Reg_CRC & 0x0001) == 0x0001)  
               Reg_CRC=(Reg_CRC>>1)^0xA001; 
           else  
               Reg_CRC >>=1; 
       }    
    }  
    return (Reg_CRC&0xffff);  
} 

//C

u16 CRC16_Check(u8 *Pushdata,u16 length)  
{  
    u16 Reg_CRC=0xffff;  
    u8 Temp_reg=0x00;  
    u16 i,j; 
       
    for( i = 0; i<length; i ++)  
    {  
        Reg_CRC^= *Pushdata++;  

        for (j = 0; j<8; j++)  
        {  
               if (Reg_CRC & 0x0001)  
                   Reg_CRC=Reg_CRC>>1^0xA001;  
            else  
                Reg_CRC >>=1;  

           }    
    }  
    return (Reg_CRC);  
} 
原文地址:https://www.cnblogs.com/LittleTiger/p/4682012.html