最近写安卓串口通信需要用到modebus 的crc16通信,网上找了很多都是字符串的,我需要byte的,由于java没有无符号数,转换有点小麻烦,对着C一步步测试,最终测试无误
代码如下:
//javaint CRC16_Check(byte Pushdata[],int length)
{
int Reg_CRC=0xffff;
int temp;
int i,j;
for( i = 0; i
{
temp = Pushdata[i];
if(temp
temp &= 0xff;
Reg_CRC^= temp;
for (j = 0; j>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
{
Reg_CRC^= *Pushdata++;
for (j = 0; j>1^0xA001;
else
Reg_CRC >>=1;
}
}
return (Reg_CRC);
}