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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 线程死锁是什么

    线程死锁是什么线程死锁:两个或两个以上的线程在执行过程中同时被阻塞,它们中的某个或者全部都在等待某个资源被释放,由于线程被无限期的阻塞,系统处于死锁状态或系统产生了死锁,这些永远在互相等待的线程被称为线程死锁如上图所示,线程A持有资源2,线程B持有资源1,它们都想申请对方的资源,所以这两个线程就会互相等待而进入死锁状态如果想要了解什么是线程阻塞的朋友,可以看我之前发的一篇线程的阻塞线程死锁示例代码如下:线程A通过synchronized(resource1)获得resource1的监视器锁,然后通

    2022年7月13日
    20
  • commonJS 和 es6规范 的引入导出

    commonJS 和 es6规范 的引入导出

    2022年2月23日
    63
  • windows虚拟内存机制

    windows虚拟内存机制

    2022年3月6日
    64
  • JAVA校园二手交易平台

    JAVA校园二手交易平台本系统主要面向于大学校园网用户,依托校园网提供给这些用户一个发布和交流二手商品信息的平台。在大学校园里,存在着很多的二手商品,但是由于信息资源的不流通以及传统二手商品信息交流方式的笨拙,导致了很多仍然具有一定价值或者具有非常价值的二手商品的囤积,乃至被当作废弃物处理。现在通过校园网进入到本系统,可以方便快捷的发布和交流任何二手商品的信息,并且可以通过留言方式进行深一步的交流。由于每个大学的校园网都…

    2022年6月15日
    25
  • Vue + Spring Boot 项目实战(二):使用 CLI 搭建 Vue.js 项目

    Vue + Spring Boot 项目实战(二):使用 CLI 搭建 Vue.js 项目详细讲解如何使用VueCLI搭建前端项目以及项目结构分析。

    2022年4月30日
    48
  • 亿级大表分库分表实战总结(万字干货,实战复盘)

    亿级大表分库分表实战总结(万字干货,实战复盘)

    2020年11月19日
    219

发表回复

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

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