码迷,mamicode.com
首页 > 移动开发 > 详细

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

时间:2015-07-28 12:19:30      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:

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

 

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

标签:

原文地址:http://www.cnblogs.com/LittleTiger/p/4682012.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!