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


相关推荐

  • iconfont的基本使用

    iconfont的基本使用阿里巴巴的iconfont网站有很多小图标可供我们使用,链接如下iconfont网站链接。这个图标资源库可以一个图片一个图片的下载,也支持批量下载。下面我来介绍下批量下载。进入网页之后,可以选择自己需要的小图标,将鼠标移动到小图标上之后,就会出现如下所示的3个按钮。这3个按钮分别是添加到购物车、收藏、下载的按钮。如果需要批量下载图片,我们可以先添加到购物车。加入购物车之后,点击购物车按钮就会在右侧出现一个弹框。点击添加到项目(添加到项目,可以根据自己的需要设置下载哪些选项)

    2022年10月25日
    0
  • Yourphp是一款完全开源免费的.核心采用了Thinkphp框架

    Yourphp是一款完全开源免费的.核心采用了Thinkphp框架

    2021年10月9日
    40
  • 各种开源SLAM算法「建议收藏」

    各种开源SLAM算法「建议收藏」OpenSLAMhttp://openslam.org/FALKOLib(2DLIDAR)GMapping,GridSLAM(Tolearngridmapsfromlaserrangedata)tinySLAM(Laser-SLAMalgorithmin200linesofCcode)UnscentedFastSLAM(Laserdata,M…

    2022年6月16日
    56
  • linux用户上传文件权限_java只读文件怎么取消只读

    linux用户上传文件权限_java只读文件怎么取消只读Runtime.getRuntime().exec("chmod777-R"+filepath);//这里的filepath写基础路径也可以

    2022年9月5日
    2
  • OleDbCommand执行查询无效的解决[通俗易懂]

    OleDbCommand执行查询无效的解决[通俗易懂]今日连接数据库,写下以下代码  Dim conn As New OleDbConnection        Dim cmd As New OleDbCommand()        conn.ConnectionString = ConfigurationManager.ConnectionStrings(“AccessConn”).ConnectionString        cmd

    2022年5月12日
    43
  • kafka是什么?主要用在什么场景

    kafka是什么?主要用在什么场景1、kafka是什么?Kafka是由LinkedIn开发的一个分布式基于发布/订阅的消息系统,使用Scala编写,它以可水平扩展和高吞吐率而被广泛使用。2、产生背景Kafka是一个消息系统,用作LinkedIn的活动流(ActivityStream)和运营数据处理管道(Pipeline)的基础。活动流数据是几乎所有站点在对其网站使用情况做报表时都要用到的数据中最常规的部分。活动数据包括页…

    2022年10月13日
    0

发表回复

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

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