先贴资料 :https://blog.csdn.net/qq_26043945/article/details/123566360
{
//1、引言
//(1).CRC寄存器初始值为 0xFFFF;即16个字节全为1。
//(2).CRC-16/ModBus的模型为:X16+x15+X2+1,由于16进制数只能0~15位,所以舍去X1位,最后得出:0x8005H(1000 0000 0000
//0101 B)。
//(3).通过把 0x8005H的“高位”与“低位”进行互换,得到最终的多项式:0xA001H(1010 0000 0000 0001 B)
private static final int POLY = 0xa001;
public static String getCrc(byte[] bytes) {
int crc = 0xFFFF;
for (byte b : bytes) {
crc ^= b & 0xFF;
for (int i = 0; i < 8; i++) {
if ((crc & 1) != 0) {
crc >>= 1;
crc ^= POLY;
} else {
crc >>= 1;
}
}
}
return Integer.toHexString(crc);
}
}