安卓能用的modebus CRC16計算,附上對應的C語言的CRC16
阿新 • • 發佈:2019-02-20
最近寫安卓串列埠通訊需要用到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); }