ModBus CRC16计算

先贴资料 :https://blog.csdn.net/qq_26043945/article/details/123566360

{
    //1、引言
    //(1).CRC寄存器初始值为 0xFFFF;即16个字节全为1。
    //(2).CRC-16/ModBus的模型为:X16+x15+X2+1,由于16进制数只能0~15位,所以舍去X1位,最后得出:0x8005H(1000 0000 0000
    //0101 B)。
    //(3).通过把 0x8005H的“高位”与“低位”进行互换,得到最终的多项式:0xA001H(1010 0000 0000 0001 B)
    private static final int POLY = 0xa001;

    public static String getCrc(byte[] bytes) {
        int crc = 0xFFFF;
        for (byte b : bytes) {
            crc ^= b & 0xFF;
            for (int i = 0; i < 8; i++) {
                if ((crc & 1) != 0) {
                    crc >>= 1;
                    crc ^= POLY;
                } else {
                    crc >>= 1;
                }
            }
        }
        return Integer.toHexString(crc);
    }


}

校验地址:http://www.ip33.com/crc.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。