Java 做CRC -CCITT x16+x12+x5+1(0x1021),初值为0x0000 校验

由于项目需要跟单片机通信,把传输的字节做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();
    }
原文地址:https://www.cnblogs.com/ling-1991/p/7448362.html