CRC的计算流程

以此CRC计算程序为例,

1、输入:原数据是ASCII码的“A”,对应二进制数据“0100 0001”

2、选择校验方式,以CRC-4/ITU为例,多项式为x4+x+1对应二进制:10011

3、参数Info

1)Name:CRC校验算法的名称(CRC-4/ITU);

2)Width:CRC校验值的长度(此例中10011长度为5);

3)Poly:多项式(省略了最高位的1;即10011==》0011=0x3);

4)RefIn:输入反转,为ture时反转,false时不反转

RefIn的反转:

在计算输入反转时,反转的操作是针对每一个字节的bit位进行反转,字节数据之间仍保持原有顺序

5)Init:该参数的值有两种形式:全为0,全为1

在判定并执行RefIn之后:

当Init全为1时,表示在算法开始前对数据的前CRC位数(高位)先和对应位数个1进行异或(即:前CRC位数的值按位取反),再在后面补上CRC位数个0,才进行后续计算。

当Init全为0时,在算法开始前对数据(这个数据是根据RefIn的值得到的)后面补上CRC位数个0后就可以进行后续计算;

6)RefOut-输出反转

备注:RefIn和RefOut这两个值同时为ture或者同时为false

RefOut的反转:

是将计算获得的CRC码整体进行反转,而不是像RefIn一样仅反转字节内的bit;

6)XorOut:表示执行完RefOut之后,对结果进行异或全0或者全1(该例中为全0异或)。

7)本例计算过程如下:

原始数据“A”对应的ASCII码得到数据1:0100 0001

采用了CRC-4/ITU多项式X4+X+1的算法,得到除数数据2:10011

由于RefIn=ture,输入数据进行反转,并补4个0,得到数据3:1000 0010 0000

数据3(被除数)和数据2(除数)做模2除法,得到数据3:1000

RefOut为ture且XorOut=0x00,输出数据进行反转,然后和0000进行异或,得到最终的校验码:CRC=0001

9)关于XorOut的用法,再举一个例子:

原始数据“A”对应的ASCII码得到数据1:0100 0001

采用了CRC-5/USB多项式X5+X2+1的算法,得到除数数据2:100101

先反转(反转的优先级高于Init的计算优先级),数据3:1000 0010

数据3的最高5位(width)的和Init:11111异或,得到数据4:111 1010

补5位(width)得到数据6:111 1010 00000

数据6与数据2,模2除法,得到数据7:01011

由于RefOut=ture,反转数据7得到数据8:11010

由于XorOut=0x1F=11111,数据8与11111进行异或运算,得到最终CRC:00101

(原创)CRC计算流程分析(RefIn,Init,RefOut,XorOut)相关推荐

  1. STM32CubeIDE开发(十), stm32的CRC计算CubeMX配置及HAL库底层实现分析

    一.stm32的CRC 1.1 CRC的简介及MCU关联说明 STM32的CRC(Cyclic Redundancy Check,循环冗余校验)计算单元使用一个固定的多项式发生器,从一个32位的数据字 ...

  2. android7 init,Android7.0 init.rc流程分析

    在http://blog.csdn.net/kc58236582/article/details/52247547这篇博客中,我们分析了init进程的流程,现在我们结合代码主要分析init.rc脚本的 ...

  3. (原创)Android6.0亮屏流程分析

    1.概述 Android的亮屏流程从android系统结构层次来分可以分为三个流程,App应用唤醒源:Framework层Power结合Display,Light服务做亮屏绘制准备工作:底层驱动点亮背 ...

  4. vasp算表面吸附流程_VASP表面吸附计算实例分析

    本文主要为了记录在学习Vasp计算过程中如何设置INCAR中的一些参数,并不着重讲解其含义,详见可自行到vasp官网查阅. 其次关于建模部分也不做细致讨论,一般结构可从Materials Studio ...

  5. VLC架构及流程分析

    0x00 前置信息 VLC是一个非常庞大的工程,我从它的架构及流程入手进行分析,涉及到一些很细的概念先搁置一边,日后详细分析. 0x01 源码结构(Android Java相关的暂未分析) # bui ...

  6. 【Android 逆向】整体加固脱壳 ( DEX 优化流程分析 | DexPrepare.cpp 中 dvmContinueOptimizati() 函数分析 )

    文章目录 前言 一.DexPrepare.cpp 中 dvmContinueOptimizati() 方法分析 前言 上一篇博客 [Android 逆向]整体加固脱壳 ( DEX 优化流程分析 | D ...

  7. 【Android 逆向】整体加固脱壳 ( DEX 优化流程分析 | DexPrepare.cpp 中 dvmOptimizeDexFile() 方法分析 | /bin/dexopt 源码分析 )

    文章目录 前言 一.DexPrepare.cpp 中 dvmOptimizeDexFile() 方法分析 二./bin/dexopt 源码分析 前言 上一篇博客 [Android 逆向]整体加固脱壳 ...

  8. android6.0源码分析之Camera API2.0下的初始化流程分析

    1.Camera2初始化的应用层流程分析 Camera2的初始化流程与Camera1.0有所区别,本文将就Camera2的内置应用来分析Camera2.0的初始化过程.Camera2.0首先启动的是C ...

  9. spark提交应用的全流程分析

    spark提交应用的全流程分析 @(SPARK)[spark] 本文分析一下spark的应用通过spark-submit后,如何提交到集群中并开始运行. 先介绍一下spark从提交到运行的全流程,下面 ...

最新文章

  1. 云从科技3D人体重建技术刷新3项纪录!仅凭照片即可生成精细模型
  2. 马斯克发布脑机接口系统!芯片直连大脑,激光开颅放置,可用iPhone操控,网友炸了:这就是黑客帝国...
  3. react编译报错:Import in body of module; reorder to top import/first
  4. 异步/同步、阻塞/非阻塞的理解
  5. linux系统 opt扩容,Linux系统扩容根目录磁盘空间的操作方法
  6. 20道JS原理题助你面试一臂之力!
  7. android 代码设置dialog 全屏,Android里把Dialog设置为全屏的方法
  8. 朴素的UNIX之-Linux CFS一个注释
  9. javascript 不让成为nan_JavaScript高级,第一集
  10. c代码格式化_Python 只用一行代码,可以实现哪些事儿?
  11. BZOJ_1626_[Usaco2007_Dec]_Building_Roads_修建道路_(Kruskal)
  12. 第十一章 缓存机制——《跟我学Shiro》[张开涛]
  13. 决策树的实现及可视化方法总结
  14. 路由器与计算机的ip地址,路由器ip地址与mac地址绑定
  15. 【万字讲解C语言入门小游戏】——三子棋
  16. 唯心主义-柏拉图的哲学世界
  17. 字符串大小写字母转换c 语言,C语言中对字母进行大小写转换的简单方法
  18. 图像处理中的一阶偏导数和二阶偏导数
  19. ANSVC无功补偿装置在南京某高等院校中的应用-安科瑞华楠
  20. 开发者在掘金路上的选择

热门文章

  1. Spring Cloud Eureka 自我保护机制(EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY)
  2. 常见Andriod游戏破解搜索关键字
  3. python程序化交易实例-用 Python 实现你的量化交易策略
  4. 如何在android中设置背景图片,在Android中设置窗口背景图
  5. 缺少包含@author的注释信息解决方法
  6. ftp服务器为我方,对方发送数据,巡检光衰数据导入es
  7. linux的系统文件位置,剖析Linux系统中的文件系统路径
  8. 怎么计算机求和错误的,《表格计算求和错误怎么办》 为什么EXCEL公式求和会有错误...
  9. OFDM系统中为什么子载波间隔△f是符号周期Ts的倒数
  10. 100条养生、养心秘笈,值得一看