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


相关推荐

  • 华为OJ机试训练(一)

    华为OJ机试训练(一)

    2022年1月28日
  • 网络协议篇之DHCP协议(一)—— DHCP协议基础

    网络协议篇之DHCP协议(一)—— DHCP协议基础一,动态主机配置协议DHCP1,DHCP简介DHCP(DynamicHostConfigurationProtocol),动态主机配置协议,是一个应用层协议。当我们将客户主机ip地址设置为动态获取方式时,DHCP服务器就会根据DHCP协议给客户端分配IP,使得客户机能够利用这个IP上网。DHCP的前身是BOOTP协议(BootstrapProtocol),BOOTP

    2022年5月10日
  • Java字符串分割函数split「建议收藏」

    Java字符串分割函数split「建议收藏」Java中的我们可以利用split把字符串按照指定的分割符进行分割,然后返回字符串数组,下面是string.split的用法实例及注意事项: 1.split方法 将一个字符串分割为子字符串,然后将结果作为字符串数组返回。 基本格式:stringObj.split([separator,[limit]]) (1)stringObj 必选项。要被分解的对象即你想要进行操作的字符串,该对象…

    2022年6月17日
  • Tomcat配置appBase为空时BlazeDS找不到endpoint路径[通俗易懂]

    因为有用quartz定时任务,把tomcat的appBase设置为空,以防同时执行2次。但这样BlazeDS初始化时会找不到endpoint路径。 解决方法是把endpointurl中的{context.root}全部改为项目的路径,如项目是webapps\abc,就把所有{context.root}改为abc…

    2022年4月15日
  • 机房效果图制作|简易制作教程赘述

    机房效果图制作|简易制作教程赘述首先看图,这个图是人视角度,两侧显露出来的空间很大,注重表现的是两侧的机柜,包含列头柜,精密空调及上方的冷通道。第一步:客户肯定得提供图纸类的资料,如CAD图纸,或是手绘的平面布置图等。这里面需要包含机房的数量,排列组合为止或是模块化设置。第二步:拿到资料,和客户沟通之后,首先要明白客户表现的是什么效果,哪个地方是侧重点等。第三步:沟通完了就需要进行下一步,就是如果客户提供了CAD图纸

    2022年5月5日
  • 12306自动刷票下单-登录篇(一)

    12306自动刷票下单-登录篇(一)12306网站推出图片验证码以后,对于抢票软件就提出了更高的要求,本篇并不涉及自动识别验证码登录(主要是博主能力所限),提供一个途径-打码平台,这个几乎是可以激活成功教程所有验证码了,本篇主要是分享一下12306网站登录的流程的学习,勿吐槽,有问题请指正,博主也是刚开始接触爬虫,大家共勉共勉。废话不多说了,直接干吧 首先打开12306登录页面https://kyfw.12306.cn/otn/login/…

    2022年10月23日

发表回复

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

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