Modbus CRC校验算法

uint16_tcrc_reflect(uint16_tdata,int32_tlen){uint16_tret=data&0x01;for(int32_ti=1;i<len;i++){data>>=1;ret=(ret<<1)|(data&am…

大家好,又见面了,我是你们的朋友全栈君。


uint16_t crc_reflect(uint16_t data, int32_t len)
{
    uint16_t ret = data & 0x01;
    for (int32_t i = 1; i < len; i++) {
        data >>= 1;
        ret = (ret << 1) | (data & 0x01);
    }
    return ret;
}

uint16_t calculateCRC(const char *data, int32_t len)
{
    uint16_t crc = 0xFFFF;
    while (len--) {
        const uint8_t c = *data++;
        for (int32_t i = 0x01; i & 0xFF; i <<= 1) {
            bool bit = crc & 0x8000;
            if (c & i)
                bit = !bit;
            crc <<= 1;
            if (bit)
                crc ^= 0x8005;
        }
        crc &= 0xFFFF;
    }
    crc = crc_reflect(crc & 0xFFFF, 16) ^ 0x0000;
    return (crc >> 8) | (crc << 8); // swap bytes
}

此算法为 Qt源码中摘录,通过本机测试,亲测有效

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/126468.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 阿里巴巴Java开发手册(终极版)[通俗易懂]

    不知不觉间,2020年已经过了一大半了,作为技术圈中你,准备好迎接最新的变化了吗?在本文中,我们将以编程界最常用的编程语言Java为例,分享最为主流的技术与工具。2020年最流行的Java开发技术Java几乎无处不在,无论在智能手机、台式机、游戏设备还是科学超级计算机上,处处都有Java的影子。全世界有数百万的Java程序员在开发基于Java的产品。然而,如此激烈的竞争,意味着Java开发人员必须时刻保持领先地位。为此,他们必须随时了解和洞悉Java生态系统中的最新动..

    2022年4月18日
    51
  • mybatis @MapperScan 解析

    mybatis @MapperScan 解析MapperScan注解会引入MapperScannerRegistrar,MapperScannerRegistrar实现了ImportBeanDefinitionRegistrar,可以向beanFactory中注册BeanDefinition,具体注入的过程是通过ClassPathMapperScanner实现的。publicvoidregisterBeanDefi…

    2022年5月2日
    60
  • mysql有关运维的面试题_mysql数据库运维面试题「建议收藏」

    mysql有关运维的面试题_mysql数据库运维面试题「建议收藏」1.登陆数据库(1)单实例mysql-uroot-poldboy(2)多实例mysql-uroot-poldboy-S/data/3306/mysql.sock2.查看数据库版本及当前登录用户是什么mysql>selectversion();查看版本+————+|version()|+————+|5.5.22-log|+——-…

    2022年6月8日
    89
  • VHDL和Verilog的区别

    VHDL和Verilog的区别这两种语言都是用于数字电子系统设计的硬件描述语言,而且都已经是IEEE的标准。VHDL1987年成为标准,而Verilog是1995年才成为标准的。这个是因为VHDL是美国军方组织开发的,而Verilog是一个公司的私有财产转化而来的。为什么Verilog能成为IEEE标准呢?它一定有其优越性才行,所以说Verilog有更强的生命力。 这两

    2022年4月19日
    47
  • 我刚刚做了一个艰难的决定「建议收藏」

    我刚刚做了一个艰难的决定「建议收藏」腾讯做了个艰难的决定,如果您电脑里安装了360软件,建议您卸载了它在运行QQ~可口可乐做出了一个非常艰难的决定,如果检测到用户胃里有百事可乐,将自动释放敌敌畏和鹤顶红中国移动做出一个非常艰难的决定,如果方圆百米内检测到有联通用户将使这些用户不间断自动拨打110迅雷做出一个非常艰难的决定,如果检测到用户电脑内安装快车,将拒绝下载教育片宝马做出了一个非常艰难的决定,如果检测到用户使用过奔驰宝马刹车将自动失灵蒙牛做了个艰难的决定,如果监测到用户胃里有伊利牛奶,将自动释放三聚氰胺麦当劳做了个艰难的决定,如果监测

    2022年7月25日
    7
  • 笔记视频_微信里笔记怎么编辑

    笔记视频_微信里笔记怎么编辑日常开发小笔记(this小操作)

    2022年4月21日
    48

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号