CRC校验 |
您所在的位置:网站首页 › 在线生成crc校验码 › CRC校验 |
一:CRC概念 1.1、参考博客参考的教程如下: 手算CRC及其实现 CRC校验算法原理分析 一文讲透CRC校验码-附赠C语言实例 CRC校验(手算与直观演示) CRC(循环冗余校验)在线计算 1.2、什么是CRCCRC(Cyclic Redundancy Checksum)是一种纠错技术,代表循环冗余校验和,可以认为在输入端根据一定的规则计算出来CRC checksum,编组到message信息中,发送到接收端。接收端根据相同的规则解码接收到的信息,如果接收到的CRC checksum与预期值相同,则说明得到的数据正确,否则异常。 下面接收CRC checksum如何获取: 这里需要知道几个组成部分或者说计算概念:多项式公式、多项式简记式(poly)、数据宽度、初始值(init)、结果异或值、输入值反转、输出值反转、参数模型。 1.3、多项式公式与简记式对于CRC标准除数,一般使用多项式(或二项式)公式表示; 这里以CRC8作为介绍校验算法过程,CRC16和CRC32同理。 CRC8标准生成多项式 CRC-8 x8+x5+x4+1 0x31(0x131) CRC-8 x8+x2+x1+1 0x07(0x107) CRC-8 x8+x6+x4+x3+x2+x1 0x5E(0x15E) 注:由于多项式的最高为都为1,并且在代码的crc8计算中,最高位也是不使用的, 所以在多项式记录时都去掉了最高位。 实际计算也可以采用完整的多项式公式,但是这种会比较麻烦。所以我们实际代码使用的都是简记式; 1.4、计算过程以CRC16为例计算: 1.根据CRC16的标准选择初始值(init)。 2.如果有输入反转,则将数据进行反转(如果没有输入反转,则跳过。默认的都是每一个字节按位反转)。 2.将反转后数据的第一个字节与初始值高8位异或。 3.判断最高位,若该位为 0 左移一位,若为 1 左移一位再与多项式异或。 4.重复3直至8位全部移位计算结束。 5.重复将所有输入数据操作完成以上步骤,所得16位数即16位CRC校验码。 6.如果有输出反转,则将CRC校验码进行反转(如果没有输出反转,则跳过。默认的都是整个数据按位反转)。 7.将反转后的CRC校验码与结果异或值得到最终的CRC校验码。 输入反转举例 以输入 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08为例说明输入反转的概念 反转得到的值为:0x80 0x40 0xc0 0x20 0xa0 0x60 0xe0 0x10 输出反转举例 0x5ceeac03输出反转值为0xc035773a 手算的时候,最高项保留 写程序的时候,最高项不保留(优化执行次数) |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |