java编写一个crc16校验
时间: 2023-11-22 15:05:54 浏览: 136
下面是一个Java实现的CRC16校验的示例代码:
public class CRC16 {
// 预设的CRC16多项式
private static final int polynomial = 0x1021;
// 计算给定字节数组的CRC16校验值
public static int calculate(byte[] data) {
int crc = 0xFFFF;
for (byte b : data) {
crc = (crc >>> 8) ^ table[(crc ^ b) & 0xFF];
}
return crc;
}
// 预先计算CRC16校验表
private static int[] table = new int[256];
static {
for (int i = 0; i < 256; i++) {
int crc = i << 8;
for (int j = 0; j < 8; j++) {
if ((crc & 0x8000) != 0) {
crc = (crc << 1) ^ polynomial;
} else {
crc = crc << 1;
}
}
table[i] = crc & 0xFFFF;
}
}
}
上面的代码中,calculate方法接收一个字节数组作为参数,返回该字节数组的CRC16校验值。预设的CRC16多项式是0x1021。在这个方法中,我们使用了一个预先计算好的CRC16校验表,可以加快计算速度。在循环中,我们将每个字节与CRC16校验值进行异或运算,并从预先计算好的表中查找对应的值,然后将CRC16校验值右移8位并进行异或运算。最后,我们返回计算出的CRC16校验值。
阅读全文