首页 > 其他分享 >7.22日今日总结之CRC8校验

7.22日今日总结之CRC8校验

时间:2024-07-22 21:43:03浏览次数:9  
标签:多项式 CRC8 校验 7.22 crc 异或 size

今日学习通讯协议时,发现客户的数据采用了CRC8校验,之前用的都是和校验或者异或校验,头次使用CRC8校验,因此上网查阅资料学习了一下。
CRC8校验一般使用的多项式为X8+X2+X1+1
CRC8算法是通过对数据进行模2除法运算来计算余数,也称异或运算,然后将余数附加到原始数据后面,形成被校验的数据。
具体流程如下:
1.选择一个校验多项式,多项式的位数决定了CRC8算法的性能,可以使用通用标准的多项式,也可以随意选择,但是最高位和最低位必须为1。如X8+X2+X1+1,对应的多项式为0x07(高位舍去)
2.因为需要 8 位 CRC 校验,所以将需要将待校验的数据左移 8 位,低位补0。
3.将待校验数据左移8位后与校验多项式二进制数按高位对齐,低位不够则补0的方式进行异或运算。
4.将上一步得到的结果的高位0全部去掉继续与校验多项式二进制数按高位对齐,低位不够则补0的方式进行异或运算。
5.重复上一步骤直到最终结果只有8位有效数据,即为计算得出的特征值(校验码)。

从网上COPY了一段程序并加以改进,并使用在线验证工具验证通过了
附上在线验证链接> http://www.ip33.com/crc.html
/*************************************************************

  • 函数名称: Crc_8

  • 函数功能: 生成crc8 密匙

  • 入口参数: p_buffer 需要校验的数据首地址 buf_size:需要校验的数据的长度

  • 返回参数: 生成的crc8 秘钥

  • 说明:p_buffer的空间必须要要>=buf_size 此函数不负责检测数据溢出
    ************************************************************/
    static unsigned char Crc_8( unsigned char
    p_buffer, unsigned char buf_size )
    {
    unsigned char crc = 0,i;
    if(buf_size <= 0) //数据长度小于等于0则直接返回CRC=0
    {
    return crc;
    }
    while( buf_size-- )
    {
    for ( i = 0x80; i != 0; i /= 2 )
    {
    if (crc & 0x80) //判断最高位是否为1,最高位为1不需要异或,直接左移,然后再与0x07异或
    {
    crc = (crc<<1)^0x07; // 多项式:X8 + X2 + X + 1
    }
    else //最高位为0不需要异或,直接左移一位
    {
    crc<<1;
    }

        if ( (*p_buffer & i) != 0 )
        {
            crc ^= 0x07;
        }
    }
    p_buffer++;
    

    }
    return crc;
    }

标签:多项式,CRC8,校验,7.22,crc,异或,size
From: https://www.cnblogs.com/xzaxs/p/18316857

相关文章

  • 7.22数据结构
    笔记链表一.链表的引入1.1总结顺序表的优缺点    1)优点:能够直接通过下表进行定位元素,访问效率高,对元素进行查找修改比较快    2)不足:插入和删除元素需要移动大量的元素,效率较低    3)缺点:存储数据元素有上限,当达到MAX后,就不能再添加元素了、1.2链......
  • 实训day11(7.22)
    1、环境准备(1)yum源(一个云仓库+pepl仓库) [root@web~]#vim/etc/yum.repos.d/hh.repo  [a] name=a baseurl=file:///mnt gpgcheck=0 [root@web~]#vim/etc/fstab  /dev/cdrom/mntiso9660defaults00 [root@web~]#mount-a [root@web~]#yumrep......
  • 云原生周刊:Kubernetes v1.31 中的移除和主要变更|2024.7.22
    开源项目ArgoRolloutsArgoRollouts是一个Kubernetes控制器和一组自定义资源定义(CRDs),提供高级部署功能,例如蓝绿部署、金丝雀部署、金丝雀分析、实验以及渐进式交付功能给Kubernetes。ArgoRollouts可选地集成了Ingress控制器和服务网格,利用它们的流量塑形能力,在更新期......
  • 24.7.22
    最近不知道为什么心脏后面靠近背的地方经常会痛,该不会是得什么大病了吧其实平常的时候有很多东西想写的,但是到了写的时候又会忘了或者不想写了灵感这种东西真的就是随时触发的说嗯,最近又开始从头看之前看到一半的遮羞艾莉了,感觉比第一次看的时候多了很多结合自身现状的感悟了,之......
  • 2024.7.22 test
    A你有序列\(A_i\),使得\(A_i\)增加\(1\)的代价是\(b_i\),问使得所有\(A\)互不相同的最小代价。\(n\le1e5,A_i\le1e9\)对于\(A_i\)相同的,取\(B_i\)最大的留下,剩下的都\(+1\),跟后面的继续比较。B你要求所有边\(or\)起来最小的生成树,\(q\)次询问,每次新加入一条权......
  • springsecurity使用:登录与校验
    首先是引入依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency>默认方案:首次使用这个空项目的时候他会给你一个默认的账号账号名为user密码在控......
  • Spring boot 与 json_schema ,请求和响应 校验
    java中如何使用json_schema对json进行校验在Java中使用JSONSchema对JSON进行校验,你首先需要选择一个合适的库。一个常用的库是json-schema-validator。以下是如何使用它的基本步骤:添加依赖如果你使用Maven,可以在pom.xml中添加以下依赖:<dependency><groupId>com.g......
  • 【前端】表单密码格式—校验。
    如图:实现表单输入密码和确认密码的时候进行表单校验。实现方式:1.在代码的data里面定义,函数验证的方法。如图所示,代码如下【代码】如下:constvalidatePassword=(rule,value,callback)=>{if(value===''){callback(newError('请输入密码'));......
  • uniapp [全端兼容] - 详细实现用户电子签名 “逐字校验“ 将姓名按字拆开分别手写签署
    前言如果您需要“合同专用”签字板及展示,请访问这篇文章。在uni-app全平台兼容(H5网页网站、支付宝/微信小程序、安卓App、苹果App、nvue)项目开发中,详解完成用户进行电子签名时,将其姓名进行拆分为独立的汉字,并由系统自动生成渲染对应的单个汉字文字的签名和验证笔画......
  • 非Controller控制层参数校验怎么办
    参数校验背景通常在SpringBoot中,参数校验是在Controller控制层完成的。文章探讨了在非Controller控制层进行参数校验的方法。Validator接口Spring提供了JSR-303的一个变种@Validated。Validator接口定义了用于执行验证的方法,主要方法包括:validate(Tobject,Cla......