安卓能用的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);  
} 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值