/**
* 计算给定数据的CRC16校验码。
*
* @param data 要计算CRC16的数据,以十六进制字符串形式表示。
* @return CRC16校验码的整数值。
*/
public static int calculateCRC16(String data) {
int crc = 0xFFFF; // 初始值
int polynomial = 0xA001; // CRC16多项式
// 遍历数据的每一个字节
for (int i = 0; i < data.length(); i += 2) {
int currentByte = Integer.parseInt(data.substring(i, i + 2), 16);
// 将当前字节与CRC值进行异或运算
crc ^= currentByte;
// 遍历当前字节的每一位
for (int j = 0; j < 8; j++) {
// 如果CRC的最低位是1
if ((crc & 0x0001) != 0) {
crc >>= 1; // 右移一位
crc ^= polynomial; // 与多项式进行异或运算
} else {
crc >>= 1; // 右移一位
}
}
}
// 返回计算得到的CRC16校验码
return crc;
}
调用calculateCRC16方法.传入16进制的字符就能得到CRC16校验码.