I am analyzing a feed from a GPS which uses CRC-CCITT16 (Kermit) for the below message
Message From GPS Device:
(byte) 0x3,(byte) 0xfb,(byte) 0x0,(byte) 0x3,(byte) 0x13,(byte) 0x61,(byte) 0x2d,(byte) 0x5f,(byte) 0xc0,(byte) 0xa,(byte) 0x1,(byte) 0x1,(byte) 0x10,(byte) 0x55,(byte) 0xff,(byte) 0xb1,(byte) 0x59,(byte) 0x0,(byte) 0x0,(byte) 0x2f,(byte) 0xd3,(byte) 0xe4,(byte) 0x11,(byte) 0x7,(byte) 0xb8,(byte) 0x2,(byte) 0x2,(byte) 0x2,(byte) 0x77,(byte) 0x47,(byte) 0xc2,(byte) 0x6,(byte) 0x0,(byte) 0x0,(byte) 0x23,(byte) 0x7,(byte) 0x7,(byte) 0x5,(byte) 0x0,(byte) 0x1b,(byte) 0xff,(byte) 0x2,(byte) 0x0,(byte) 0x3,(byte) 0x0,(byte) 0x1c,(byte) 0x1,(byte) 0x20,(byte) 0x20,(byte) 0xad,(byte) 0x0,(byte) 0x4,(byte) 0x1d,(byte) 0x0,(byte) 0x0,(byte) 0x1e,(byte) 0x0,(byte) 0x0,(byte) 0x16,(byte) 0x0,(byte) 0x11,(byte) 0x17,(byte) 0x0,(byte) 0x6,(byte) 0x2,(byte) 0x41,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x96,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x55,(byte) 0xff,(byte) 0xd2,(byte) 0xfb,(byte) 0x0,(byte) 0x0,(byte) 0x2f,(byte) 0xd3,(byte) 0xe5,(byte) 0xa1,(byte) 0x7,(byte) 0xb8,(byte) 0xa,(byte) 0x25,(byte) 0x2,(byte) 0x55,(byte) 0x0,(byte) 0x0,(byte) 0x5,(byte) 0x0,(byte) 0x0,(byte) 0x20,(byte) 0x7,(byte) 0x7,(byte) 0x5,(byte) 0x0,(byte) 0x1b,(byte) 0xff,(byte) 0x2,(byte) 0x0,(byte) 0x3,(byte) 0x0,(byte) 0x1c,(byte) 0x1,(byte) 0x20,(byte) 0x1f,(byte) 0xad,(byte) 0x0,(byte) 0x4,(byte) 0x1d,(byte) 0x0,(byte) 0x0,(byte) 0x1e,(byte) 0x0,(byte) 0x0,(byte) 0x16,(byte) 0x0,(byte) 0x11,(byte) 0x17,(byte) 0x0,(byte) 0x1,(byte) 0x2,(byte) 0x41,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x96,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x55,(byte) 0xff,(byte) 0xe1,(byte) 0x14,(byte) 0x0,(byte) 0x0,(byte) 0x2f,(byte) 0xd3,(byte) 0xe5,(byte) 0xa1,(byte) 0x7,(byte) 0xb8,(byte) 0xa,(byte) 0x25,(byte) 0x0,(byte) 0x56,(byte) 0x0,(byte) 0x0,(byte) 0x8,(byte) 0x0,(byte) 0x0,(byte) 0x16,(byte) 0x7,(byte) 0x7,(byte) 0x5,(byte) 0x0,(byte) 0x1b,(byte) 0xff,(byte) 0x2,(byte) 0x0,(byte) 0x3,(byte) 0x0,(byte) 0x1c,(byte) 0x1,(byte) 0x20,(byte) 0x20,(byte) 0xad,(byte) 0x0,(byte) 0x4,(byte) 0x1d,(byte) 0x0,(byte) 0x0,(byte) 0x1e,(byte) 0x0,(byte) 0x0,(byte) 0x16,(byte) 0x0,(byte) 0x12,(byte) 0x17,(byte) 0x0,(byte) 0x1,(byte) 0x2,(byte) 0x41,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x96,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x55,(byte) 0xff,(byte) 0xef,(byte) 0x2d,(byte) 0x0,(byte) 0x0,(byte) 0x2f,(byte) 0xd3,(byte) 0xe5,(byte) 0xa1,(byte) 0x7,(byte) 0xb8,(byte) 0xa,(byte) 0x25,(byte) 0x1,(byte) 0xe5,(byte) 0x0,(byte) 0x0,(byte) 0x6,(byte) 0x0,(byte) 0x0,(byte) 0xe,(byte) 0x7,(byte) 0x7,(byte) 0x5,(byte) 0x0,(byte) 0x1b,(byte) 0xff,(byte) 0x2,(byte) 0x0,(byte) 0x3,(byte) 0x0,(byte) 0x1c,(byte) 0x1,(byte) 0x20,(byte) 0x20,(byte) 0xad,(byte) 0x0,(byte) 0x4,(byte) 0x1d,(byte) 0x0,(byte) 0x0,(byte) 0x1e,(byte) 0x0,(byte) 0x0,(byte) 0x16,(byte) 0x0,(byte) 0x12,(byte) 0x17,(byte) 0x0,(byte) 0x1,(byte) 0x2,(byte) 0x41,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x96,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x55,(byte) 0xff,(byte) 0xfd,(byte) 0x46,(byte) 0x0,(byte) 0x0,(byte) 0x2f,(byte) 0xd3,(byte) 0xe5,(byte) 0xa1,(byte) 0x7,(byte) 0xb8,(byte) 0xa,(byte) 0x25,(byte) 0x0,(byte) 0x27,(byte) 0x0,(byte) 0x0,(byte) 0x9,(byte) 0x0,(byte) 0x0,(byte) 0xa,(byte) 0x7,(byte) 0x7,(byte) 0x5,(byte) 0x0,(byte) 0x1b,(byte) 0xff,(byte) 0x2,(byte) 0x0,(byte) 0x3,(byte) 0x0,(byte) 0x1c,(byte) 0x1,(byte) 0x20,(byte) 0x20,(byte) 0xad,(byte) 0x0,(byte) 0x4,(byte) 0x1d,(byte) 0x0,(byte) 0x0,(byte) 0x1e,(byte) 0x0,(byte) 0x0,(byte) 0x16,(byte) 0x0,(byte) 0x11,(byte) 0x17,(byte) 0x0,(byte) 0x1,(byte) 0x2,(byte) 0x41,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x96,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x56,(byte) 0x38,(byte) 0x55,(byte) 0xc3,(byte) 0x0,(byte) 0x0,(byte) 0x2f,(byte) 0xd3,(byte) 0xf7,(byte) 0x99,(byte) 0x7,(byte) 0xb8,(byte) 0xf,(byte) 0x9d,(byte) 0x0,(byte) 0x0,(byte) 0x48,(byte) 0x44,(byte) 0x4,(byte) 0x0,(byte) 0x3,(byte) 0x1b,(byte) 0x7,(byte) 0x7,(byte) 0x5,(byte) 0x0,(byte) 0x1b,(byte) 0xff,(byte) 0x2,(byte) 0x0,(byte) 0x3,(byte) 0x0,(byte) 0x1c,(byte) 0x1,(byte) 0x20,(byte) 0x1c,(byte) 0xad,(byte) 0x0,(byte) 0x4,(byte) 0x1d,(byte) 0x0,(byte) 0x0,(byte) 0x1e,(byte) 0x0,(byte) 0x0,(byte) 0x16,(byte) 0x0,(byte) 0xe,(byte) 0x17,(byte) 0x0,(byte) 0x1,(byte) 0x2,(byte) 0x41,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x96,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x56,(byte) 0x38,(byte) 0xa8,(byte) 0xd7,(byte) 0x0,(byte) 0x0,(byte) 0x2f,(byte) 0xd3,(byte) 0xe3,(byte) 0x17,(byte) 0x7,(byte) 0xb8,(byte) 0x14,(byte) 0x1b,(byte) 0x0,(byte) 0xc9,(byte) 0x45,(byte) 0xb0,(byte) 0x4,(byte) 0x0,(byte) 0x5,(byte) 0x14,(byte) 0x7,(byte) 0x7,(byte) 0x5,(byte) 0x0,(byte) 0x1b,(byte) 0xff,(byte) 0x2,(byte) 0x0,(byte) 0x3,(byte) 0x0,(byte) 0x1c,(byte) 0x1,(byte) 0x20,(byte) 0x1d,(byte) 0xad,(byte) 0x0,(byte) 0x4,(byte) 0x1d,(byte) 0x0,(byte) 0x0,(byte) 0x1e,(byte) 0x0,(byte) 0x0,(byte) 0x16,(byte) 0x0,(byte) 0xe,(byte) 0x17,(byte) 0x0,(byte) 0x0,(byte) 0x2,(byte) 0x41,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x96,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x56,(byte) 0x38,(byte) 0xb6,(byte) 0xf0,(byte) 0x0,(byte) 0x0,(byte) 0x2f,(byte) 0xd3,(byte) 0xe3,(byte) 0x17,(byte) 0x7,(byte) 0xb8,(byte) 0x14,(byte) 0x1b,(byte) 0x0,(byte) 0x0,(byte) 0x45,(byte) 0xb0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x7,(byte) 0x7,(byte) 0x5,(byte) 0x0,(byte) 0x1b,(byte) 0xff,(byte) 0x2,(byte) 0x0,(byte) 0x3,(byte) 0x0,(byte) 0x1c,(byte) 0x1,(byte) 0x20,(byte) 0x1c,(byte) 0xad,(byte) 0x0,(byte) 0x4,(byte) 0x1d,(byte) 0x0,(byte) 0x0,(byte) 0x1e,(byte) 0x0,(byte) 0x0,(byte) 0x16,(byte) 0x0,(byte) 0xf,(byte) 0x17,(byte) 0x0,(byte) 0x3,(byte) 0x2,(byte) 0x41,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x96,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x56,(byte) 0x54,(byte) 0x80,(byte) 0xf5,(byte) 0x0,(byte) 0x0,(byte) 0x2f,(byte) 0xd3,(byte) 0xea,(byte) 0x62,(byte) 0x7,(byte) 0xb8,(byte) 0x14,(byte) 0xb1,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x4,(byte) 0x0,(byte) 0x0,(byte) 0x1f,(byte) 0x7,(byte) 0x7,(byte) 0x5,(byte) 0x0,(byte) 0x1b,(byte) 0xff,(byte) 0x2,(byte) 0x0,(byte) 0x3,(byte) 0x0,(byte) 0x1c,(byte) 0x1,(byte) 0x20,(byte) 0x1f,(byte) 0xad,(byte) 0x0,(byte) 0x4,(byte) 0x1d,(byte) 0x0,(byte) 0x0,(byte) 0x1e,(byte) 0x0,(byte) 0x0,(byte) 0x16,(byte) 0x0,(byte) 0x11,(byte) 0x17,(byte) 0x0,(byte) 0x0,(byte) 0x2,(byte) 0x41,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x96,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x56,(byte) 0x54,(byte) 0x81,(byte) 0x9,(byte) 0x0,(byte) 0x0,(byte) 0x2f,(byte) 0xd3,(byte) 0xe6,(byte) 0xde,(byte) 0x7,(byte) 0xb8,(byte) 0x13,(byte) 0x10,(byte) 0x0,(byte) 0x24,(byte) 0x0,(byte) 0x0,(byte) 0x4,(byte) 0x0,(byte) 0x0,(byte) 0x1f,(byte) 0x7,(byte) 0x7,(byte) 0x5,(byte) 0x0,(byte) 0x1b,(byte) 0xff,(byte) 0x2,(byte) 0x0,(byte) 0x3,(byte) 0x0,(byte) 0x1c,(byte) 0x1,(byte) 0x20,(byte) 0x1f,(byte) 0xad,(byte) 0x0,(byte) 0x4,(byte) 0x1d,(byte) 0x0,(byte) 0x0,(byte) 0x1e,(byte) 0x0,(byte) 0x0,(byte) 0x16,(byte) 0x0,(byte) 0x10,(byte) 0x17,(byte) 0x0,(byte) 0x1,(byte) 0x2,(byte) 0x41,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x96,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x56,(byte) 0x54,(byte) 0x81,(byte) 0x13,(byte) 0x0,(byte) 0x0,(byte) 0x2f,(byte) 0xd3,(byte) 0xe8,(byte) 0xc1,(byte) 0x7,(byte) 0xb8,(byte) 0x11,(byte) 0xe4,(byte) 0x0,(byte) 0x0,(byte) 0x30,(byte) 0x2a,(byte) 0x4,(byte) 0x0,(byte) 0x1,(byte) 0x1f,(byte) 0x7,(byte) 0x7,(byte) 0x5,(byte) 0x0,(byte) 0x1b,(byte) 0xff,(byte) 0x2,(byte) 0x0,(byte) 0x3,(byte) 0x0,(byte) 0x1c,(byte) 0x1,(byte) 0x20,(byte) 0x1f,(byte) 0xad,(byte) 0x0,(byte) 0x4,(byte) 0x1d,(byte) 0x0,(byte) 0x0,(byte) 0x1e,(byte) 0x0,(byte) 0x0,(byte) 0x16,(byte) 0x0,(byte) 0xe,(byte) 0x17,(byte) 0x0,(byte) 0x5,(byte) 0x2,(byte) 0x41,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x96,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x56,(byte) 0x54,(byte) 0x81,(byte) 0x1d,(byte) 0x0,(byte) 0x0,(byte) 0x2f,(byte) 0xd3,(byte) 0xeb,(byte) 0x7d,(byte) 0x7,(byte) 0xb8,(byte) 0x10,(byte) 0xc9,(byte) 0x0,(byte) 0x0,(byte) 0x2f,(byte) 0x58,(byte) 0x4,(byte) 0x0,(byte) 0x2,(byte) 0x1f,(byte) 0x7,(byte) 0x7,(byte) 0x5,(byte) 0x0,(byte) 0x1b,(byte) 0xff,(byte) 0x2,(byte) 0x0,(byte) 0x3,(byte) 0x0,(byte) 0x1c,(byte) 0x1,(byte) 0x20,(byte) 0x1f,(byte) 0xad,(byte) 0x0,(byte) 0x4,(byte) 0x1d,(byte) 0x0,(byte) 0x0,(byte) 0x1e,(byte) 0x0,(byte) 0x0,(byte) 0x16,(byte) 0x0,(byte) 0x11,(byte) 0x17,(byte) 0x0,(byte) 0x2,(byte) 0x2,(byte) 0x41,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x96,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x56,(byte) 0x54,(byte) 0x81,(byte) 0x27,(byte) 0x0,(byte) 0x0,(byte) 0x2f,(byte) 0xd3,(byte) 0xec,(byte) 0x56,(byte) 0x7,(byte) 0xb8,(byte) 0x11,(byte) 0x3e,(byte) 0x0,(byte) 0x0,(byte) 0x2f,(byte) 0x58,(byte) 0x4,(byte) 0x0,(byte) 0x0,(byte) 0x1e,(byte) 0x7,(byte) 0x7,(byte) 0x5,(byte) 0x0,(byte) 0x1b,(byte) 0xff,(byte) 0x2,(byte) 0x0,(byte) 0x3,(byte) 0x0,(byte) 0x1c,(byte) 0x1,(byte) 0x20,(byte) 0x1f,(byte) 0xad,(byte) 0x0,(byte) 0x4,(byte) 0x1d,(byte) 0x0,(byte) 0x0,(byte) 0x1e,(byte) 0x0,(byte) 0x0,(byte) 0x16,(byte) 0x0,(byte) 0x11,(byte) 0x17,(byte) 0x0,(byte) 0x1,(byte) 0x2,(byte) 0x41,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x96,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x56,(byte) 0x54,(byte) 0x81,(byte) 0x31,(byte) 0x0,(byte) 0x0,(byte) 0x2f,(byte) 0xd3,(byte) 0xe9,(byte) 0xed,(byte) 0x7,(byte) 0xb8,(byte) 0x10,(byte) 0xfb,(byte) 0x0,(byte) 0x0,(byte) 0x2f,(byte) 0x58,(byte) 0x4,(byte) 0x0,(byte) 0x0,(byte) 0x1e,(byte) 0x7,(byte) 0x7,(byte) 0x5,(byte) 0x0,(byte) 0x1b,(byte) 0xff,(byte) 0x2,(byte) 0x0,(byte) 0x3,(byte) 0x0,(byte) 0x1c,(byte) 0x1,(byte) 0x20,(byte) 0x1f,(byte) 0xad,(byte) 0x0,(byte) 0x4,(byte) 0x1d,(byte) 0x0,(byte) 0x0,(byte) 0x1e,(byte) 0x0,(byte) 0x0,(byte) 0x16,(byte) 0x0,(byte) 0x11,(byte) 0x17,(byte) 0x0,(byte) 0x0,(byte) 0x2,(byte) 0x41,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x96,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x56,(byte) 0x54,(byte) 0x81,(byte) 0x3b,(byte) 0x0,(byte) 0x0,(byte) 0x2f,(byte) 0xd3,(byte) 0xea,(byte) 0xc6,(byte) 0x7,(byte) 0xb8,(byte) 0xf,(byte) 0x18,(byte) 0x0,(byte) 0x7,(byte) 0x31,(byte) 0xec,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x7,(byte) 0x7,(byte) 0x5,(byte) 0x0,(byte) 0x1b,(byte) 0xff,(byte) 0x2,(byte) 0x0,(byte) 0x3,(byte) 0x0,(byte) 0x1c,(byte) 0x1,(byte) 0x20,(byte) 0x1f,(byte) 0xad,(byte) 0x0,(byte) 0x4,(byte) 0x1d,(byte) 0x0,(byte) 0x0,(byte) 0x1e,(byte) 0x0,(byte) 0x0,(byte) 0x16,(byte) 0x0,(byte) 0x11,(byte) 0x17,(byte) 0x0,(byte) 0x0,(byte) 0x2,(byte) 0x41,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x96,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x56,(byte) 0x54,(byte) 0x81,(byte) 0x45,(byte) 0x0,(byte) 0x0,(byte) 0x2f,(byte) 0xd3,(byte) 0xe8,(byte) 0xf3,(byte) 0x7,(byte) 0xb8,(byte) 0xe,(byte) 0xe6,(byte) 0x0,(byte) 0x32,(byte) 0x31,(byte) 0xec,(byte) 0x4,(byte) 0x0,(byte) 0x0,(byte) 0x1e,(byte) 0x7,(byte) 0x7,(byte) 0x5,(byte) 0x0,(byte) 0x1b,(byte) 0xff,(byte) 0x2,(byte) 0x0,(byte) 0x3,(byte) 0x0,(byte) 0x1c,(byte) 0x1,(byte) 0x20,(byte) 0x1f,(byte) 0xad,(byte) 0x0,(byte) 0x4,(byte) 0x1d,(byte) 0x0,(byte) 0x0,(byte) 0x1e,(byte) 0x0,(byte) 0x0,(byte) 0x16,(byte) 0x0,(byte) 0x11,(byte) 0x17,(byte) 0x0,(byte) 0x1,(byte) 0x2,(byte) 0x41,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x96,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0xad,(byte) 0xa4
where last 2 bytes is CRC. Java Code used to calculate the CRC is:
private static int crc16(byte[] buffer, int length) {
int CRC = 0x0;
int carry = 0;
int poly = 0x8408;
for(int index = 0; index < length; index++) {
CRC ^= (buffer[index] & 0xFF);
for(int i = 0; i < 8; i++) {
carry = CRC & 1;
CRC >>= 1;
if(carry != 0) {
CRC ^= poly;
}
}
}
return CRC;
}
On using the above code CRC calculate is 58001. But the CRC in the message is 44452. Can anyone help me out.I even tried other implementations for CRC calculation that too didn't work.