package yaokong;
|
public class CRC16 {
|
private static final int POLYNOMIAL = 0x1021;
|
private static final int INITIAL_VALUE = 0xFFFF;
|
|
// 计算给定数据段的CRC16校验值
|
public static int calculateCRC16(byte[] data, int offset, int length) {
|
int crc = INITIAL_VALUE;
|
|
for (int i = offset; i < offset + length; i++) {
|
crc ^= (data[i] & 0xFF) << 8;
|
for (int j = 0; j < 8; j++) {
|
if ((crc & 0x8000) != 0) {
|
crc = (crc << 1) ^ POLYNOMIAL;
|
} else {
|
crc <<= 1;
|
}
|
}
|
}
|
|
return crc & 0xFFFF;
|
}
|
}
|