CRC ModBus算法返回2个字节

public class CRCModBus {

    /**
     * CRC ModBus算法返回2个字节
     * @param data
     * @return
     */
    public static byte[] calculate(byte[] data) {
        int crc = 0xFFFF; // 初始化为全1
        for (byte b : data) {
            crc ^= (b & 0xFF); // 异或操作
            for (int i = 0; i < 8; i++) {
                if ((crc & 0x0001) != 0) { // 最低位为1
                    crc >>= 1;
                    crc ^= 0xA001; // 在预设多项式下异或操作
                } else {
                    crc >>= 1;
                }
            }
        }
        byte[] crcBytes = new byte[2];
        crcBytes[0] = (byte) (crc & 0xFF);
        crcBytes[1] = (byte) ((crc >> 8) & 0xFF);
        return crcBytes;
    }

}

你可能感兴趣的:(算法,java,jvm)