CRC16 MODBUS校验算法,分两种情况,一是参数是字符串,二是参数是字节数组。
参考文章1
参考文章2
直接上代码,第一种参数是字符串
public static void main(String[] args) throws IOException {
String frame = "01 03 01 48 00 0c";
System.out.println(getCRC(frame));
}
public static String getCRC(String data) {
data = data.replace(" ", "");
int len = data.length();
if (!(len % 2 == 0)) {
return "0000";
}
int num = len / 2;
byte[] para = new byte[num];
for (int i = 0; i < num; i++) {
int value = Integer.valueOf(data.substring(i * 2, 2 * (i + 1)), 16);
para[i] = (byte) value;
}
return getCRC(para);
}
/**
* 计算CRC16校验码
*
* @param bytes
* 字节数组