由于项目需要跟单片机通信,把传输的字节做CRC校验,本人在网上找了跟多资料,找的算法都不是项目实际需要的,转出来的结果不一样,因为CRC校验方式很多中,如下图,相同的字节选择不同结算的结果不同
根据自己的项目需求定义是用字节还是用其他数据类型,由于项目中超过127也就是byte的范围,当时忘记这个了,在算的时候小的数字可以,大的数字又不行,后来换了数据类型就好了
private static String getCrc(String[] str) { Integer[] data = stringToInteger(str); int crc = 0x0000; for (int i = 0; i < data.length; i++) { crc ^= data[i]; for (int j = 0; j < 8; j++) { if ((crc & 0x0001) == 1) { crc >>= 1; crc ^= 0x8408; } else { crc >>= 1; } } } return toHexadecimal(String.valueOf(wcrc)).toUpperCase(); }