首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

模2除法(CRC校验计算)_crc校验模二算法

鉴于网上的讲解自己好不容易才看懂…所以整理了一下, 也方便大家能够理解 模2加减法 模2除法需要用到模2加减法,关于模2加减法,其实就是异或操作,规则如下: //不需要考虑进位借位 0 ± 0 =...0 1 ± 1 = 0 0 ± 1 = 1 1 ± 0 = 1 例: 1101 ± 1001 = 0100 计算如下: 1 1 0 1 ± 1 0 0 1 -----------...0 1 0 0 简记:同为0,异为1 ---- 模2除法: 规则:假设被除数X,除数P,余数R X除以P(对XP做模2加减法),当前X首位为1时,商1,为0时商0 所得余数R去除首位(即左移一位.../余数,此时余数位数(这里的0要忽略掉,不参与下一轮,因为最上面的被除数后面 //没有数可以给这里往后补一位了)少于除数位数,不能继续除了 商的第四位:被除数首位为1,商为1 此时不能继续做除法,计算结束

2.6K30

校验计算原理_CRC校验原理及代码

校验思路 首先,IP、ICMP、UDPTCP报文头都有检验字段,大小都是16bit,算法基本上也是一样的。 在发送数据时,为了计算数据包的检验。...虽然说上面四种报文的校验算法一样,但是在作用范围存在不同:IP校验校验20字节的IP报头;而ICMP校验覆盖整个报文(ICMP报头+ICMP数据);UDPTCP校验不仅覆盖整个报文,而且还有...另外UDP、TCP数据报的长度可以为奇数字节,所以在计算校验时需要在最后增加填充字节0(填充字节只是为了计算校验,可以不被传送)。...即无论你是发送方计算机或者接收方检查校验时,都不要调用htons或者ntohs,直接通过上面的算法就可以得到正确的结果。...计算验证校验比较简单、快递。

1.9K30
您找到你想要的搜索结果了吗?
是的
没有找到

CRC校验算法入门

CRC(Cyclic Redundancy Check),即循环冗余校验码,是通信领域中一种常用的数据校验码,通过一定算法,将计算结果附在数据后面一起进行传输,对传输的数据具有检错功能。...下面就(2)中除数被除数做一次模2除法运算进行说明。 (4)多项式位宽 多项式位宽记为W,长度为:生成多项式位数 – 1,按照CRC算法的要求,计算前要在原始数据后面填上W个0。...CRC校验码位数 = 生成多项式位数 - 1 (5)余数初始值 在计算CRC的开始,给CRC寄存器一个初始值。...02 示例 本例给出一个bit level的8位CRC校验码的计算(此算法可以用于CRC查表法中表格的生成)。...计算出的CRC校验码附在原数据帧后面,接收端以模2除法除以多项式,没有余数,则数据无误。

4K20

CRC校验算法详解「建议收藏」

CRC(Cyclic Redundancy Check)循环冗余校验是常用的数据校验方法,讲CRC算法的文章很多,之所以还要写这篇,是想换一个方法介绍CRC算法,希望能让大家更容易理解CRC算法。   ...最容易想到的校验方法是和校验,就是将传送的数据(按字节方式)加起来计算出数据的总和,并将总和传给接收方,接收方收到数据后也计算总和,并与收到的总和比较看是否相同。...好了,现在被除数除数都有了,那么就要开始做除法求CRC校验码了。...不过普通减法有差别的是,CRC的加(减)法是不进(借)位的,比如10减01,它的结果是11,而不是借位减法得到的01,因此,实际上CRC的加法减法所得的结果是一样的,比如10加01的结果是11,10...CRC如何计算呢?

2K31

C语言实例_CRC校验算法

它通过对数据进行一系列计算比较,生成一个校验值,并将其附加到数据中。接收方可以使用相同的算法对接收到的数据进行校验,然后与接收到的校验值进行比较,从而确定数据是否存在错误。...函数实现了CRC校验计算逻辑。...代码中的CRC校验函数封装函数是基于无符号8位字节无符号16位整数的数据类型进行计算的。 三、案例:数据校验 场景:在单片机通信里,单片机需要向上位机发送一段数据。...如果校验通过,可以执行进一步的数据处理操作;如果校验失败,可以进行异常处理。 示例中的CRC校验函数是基于无符号8位字节无符号16位整数的数据类型进行计算的。...可以根据实际需求进行适当修改,以适应不同的数据类型CRC算法

30730

【投稿专区】crc校验码的计算

在Modbus或环保212协议中,数据的校检码(CRC-16)由两个字节16位构成。而一般电气、自动化仪表的crc16校验,多项式码选用16进制A001。...CRC计算方式如下: 在开始时CRC寄存器的每一位都预置为1,然后把CRC寄存器与8-bit的数据进行异或,之后对CRC寄存器从高到低进行移位,在最高位(MSB)的位置补零,而最低位(LSB移位后已经被移出...重复上述的由高至低的移位8次,第一个8-bit数据处理完毕,用此时CRC寄存器的值与下一个8-bit数据异或并进行如前一个数据似的8次移位,所有的字符处理完成后CRC寄存器内的值即为最终的CRC值。...Go 语言实现如下: // 传入数据内容,返回 crc校验码 func Crc16Check(data []byte) []byte { var crc16 uint16 = 0xFFFF...for j := 0; j < 8; j++ { if crc16&0x0001 > 0 { crc16

3.8K80

CRC校验算法详解及代码实现

CRC校验算法详解及代码实现 一、 CRC校验算法前置知识 在学习CRC校验算法之前,先复习一下CRC会涉及的主要几个主要的算法。 1. 异或 异或,就是不同为1,相同为0,运算符号是^。...去掉最高为的,再被除数的下一位结合,继续模2除法。按照上图依次计算,可以得到最终的商110101,余数001。...二、 CRC校验算法及实现 CRC校验的根本思想就是先在要发送的帧后面附加一个数(这个就是用来校验校验码),生成一个新帧发送给接收端。...计算CRC。...理论上,使用上述CRC校验步骤的第二步计算CRC的时候,需要将所有的二进制序列(包括后加的k-1个0)作为一个整体按照第一章节中模2除法的方法,除以选定的除数。

4.5K21

LabVIEW实现CRC校验

目录 1、内部控件计算CRC校验 2、公式节点计算CRC校验 ---- CRC(循环冗余校验),是一种根据网络数据包或计算机文件等数据产生简短固定位数校验码的一种信道编码技术,主要用来检测或校验数据传输或者保存后可能出现的错误...本篇博文介绍两种方法实现CRC校验:内部控件计算CRC校验公式节点计算CRC校验。...软件计算(注意CRC高低位顺序)效果如下图所示: 1、内部控件计算CRC校验 使用内部控件计算CRC校验就是使用基本的运算组件实现算法计算过程。...实现代码如下所示: 2、公式节点计算CRC校验 使用公式节点计算CRC校验,这里主要依托于:公式节点。公式节点可以实现在程序框图上计算数学公式或者使用C语言进行数值运算。...这里我使用C语言编程实现CRC校验算法,通过LabVIEW输入数值接收C语言算法输出数值,实现代码如下所示:

2.3K40

CRC校验怎么算?

在详细介绍CRC计算之前,我们先来看两个常见的较为简单点的校验:串口通信中的奇偶校验身份证号码中的MOD 11-2校验。...该校验算法据说可以: 1) 如果某一位填错了,则校验算法可以检测出来。 2) 如果身份证号的相邻2位填反了,则校验算法可以检测出来。...上面的两种校验CRC校验没有什么关系,只是为了让大家对校验先有个感性的认识,下面来正式介绍CRC。...Name:算法的名称,比如对于16bit的CRC来说就有好多个名字,也就是虽然都是16 bit CRC,但是计算方式也有好多种。...当全为1时,表示在算法开始前对数据的前CRC位数(高位)先对应位数个1进行异或(即:前CRC位数的值按位取反),再在后面补上CRC位数个0,才进行后续计算

2.9K20

CRC校验

循环冗余校验码(CRC)的基本原理是:在K位信息码后再拼接R位的校验码,整个编码长度为N位,因此,这种编码也叫(N,K)码。...根据G(x)可以生成K位信息的校验码,而G(x)叫做这个CRC码的生成多项式。...1)移位:将原信息码(kbit)左移R位 (R是多项式的最高次幂,即在信息码的后面补上R个0) (2)相除:将(1)中移位好的编码作为被除数,将多项式看成二进制码作为除数(取异或),得到的R位余数就是CRC...校验码。...2、此题生成多项式有4位(R+1)(注意:4位的生成多项式计算所得的校验码为3位,R为校验码位数),要把原始报文C(X)左移3(R)位变成1010 000 3、用生成多项式对应的二进制数对左移3位后的原始报文进行模

4.9K71

CRC校验完整性

但是这样就会造成了程序(exe或者dll)里二进制的不一致性,防范这种hook方法,就是检验程序二进制的完整性,CRC算法就是这种校验的体现。...CRC算法 我们可以把程序进行如下CRC算法Result DWORD CRC32(BYTE* ptr, DWORD Size) { DWORD crcTable[256], crcTmp1;...校验的起始地址,Size则是校验的二进制字节数。...WriteFile(hFile, &szCRC32, 4, &szTemp, NULL)) { CloseHandle(hFile); } 当程序开始运行的时候,我们可以校验ptr到size中间的crc...结尾 以上是校验的过程,主要的原理即把二进制进行计算,然后得出的结果进行保存,运行的时候再次进行计算,比较两次计算结果。代码取自《加密与解密》一书。整体来说,这种保护性较弱,但可以作为一种手段升级下。

11510

给文件添加CRC校验

crc校验 crc校验常用的有CRC16CRC32,在通信中用的比较多(modbus协议等),这里不详细介绍其原理了。 crc校验不同多项式,计算结果是不一样的。...对文件的整体数据计算一个crc值,然后将这个校验码追加在文件的最后,这样既不影响文件属性,也不用再额外添加一个文件。校验文件时,可以对文件的所有数据进行校验然后对比校验码即可。...(CRC算法 * CRC 校验(Cyclic Redundancy Check)是一种数据传输错误检查方法, CRC 码两个字 * 节,包含一 16 位的二进制值。...它由传输设备计算后加入到数据包中。接收设备重新计算收 * 到消息的 CRC,并与接收到的 CRC 域中的值比较,如果两值不同,则有误。...仅每个字符中的 8Bit 数据对 CRC 有效,起始位停止位 * 以及奇偶校验位均无效。 * CRC 校验字节的生成步骤如下: * ① 装一个 16 位寄存器,所有数位均为 1。

4.5K20

CRC校验的FPGA实现

生成多项式 生成多项式 即使是CRC8也有多种,但总是有这样一个结果,最低位最高为均为1,所以可以表达为(mathtype公式插不上来,截图了): ? 其中,Hn为相关性,为0或1。...生成多项式 在进行CRC校验时,发送方接收方需要事先约定一个除数,即生成多项式,一般记为G(x),生成多项式的最高位最低位必须为1。...帧校验码的计算 设信息字段为K位,校验字段为R位,码字长度N=K+R,设双方事先约定了一个R次多项式G(x),则CRC校验码为:V(x)=A(x)G(x)=xRm(x)+r(x) m(x)为K次信息多项式...计算方法有:手算、移位寄存器并行处理。...设C0 C1 C2 C3初始值皆为0,信息码为10_1011_1011,将信息码从高位到低位逐次移入逻辑电路,计算CRC检验结果。

3.3K20

CRC计算校验原理的最通俗诠释

,本篇接着发一篇关于CRC校验原理CRC计算方面的通俗诠释的试读文章。...从上面可以看出,CRC校验中有两个关键点:一是要预先确定一个发送端接收端都用来作为除数的二进制比特串(或多项式);二是把原始帧与上面选定的除进行二进制除法运算,计算出FCS。...注意参考前面介绍的“模2除法”运算法则。...图5-10 CRC校验计算示例 (3)把上步计算得到的CRC校验码0100替换原始帧101100110000后面的四个“0”,得到新帧101100110100。...通过以上CRC校验原理的剖析CRC校验码的计算示例的介绍,大家应该对这种看似很复杂的CRC校验原理计算方法应该比较清楚了。

1K20

CRC校验原来这么简单

目录 前言 CRC算法简介 CRC计算 CRC校验 CRC计算的C语言实现 CRC计算工具 总结 前言 最近的工作中,要实现对通信数据的CRC计算,所以花了两天的时间好好研究了一下,周末有时间整理了一下笔记...校验位是为了保证数据在传输过程中的完整性,采用一种指定的算法对原始数据进行计算,得出的一个校验值。...接收方接收到数据时,采用同样的校验算法对原始数据进行计算,如果计算结果接收到的校验值一致,说明数据校验正确,这一帧数据可以使用,如果不一致,说明传输过程中出现了差错,这一帧数据丢弃,请求重发。...常用的校验算法有奇偶校验校验CRC,还有LRC、BCC等不常用的校验算法。 以串口通讯中的奇校验为例,如果数据中1的个数为奇数,则奇校验位0,否则为1。...CRC计算工具 下面这几款工具都可以自定义CRC算法模型,而且都有标准CRC模型可供选择。如果自己用C语言或者Verilog实现校验算法时,非常适合作为标准答案进行验证。

9.5K12

python 计算校验

校验是经常使用的,这里简单的列了一个针对按字节计算累加的代码片段。其实,这种累加计算,将字节翻译为无符号整数带符号整数,结果是一样的。 使用python计算校验时记住做截断就可以了。...,如果是带符号整数,最高位会被解释符号位 ''' def char_checksum(data, byteorder='little'): ''' char_checksum 按字节计算校验...如果是当作无符号整数来计算,则算法要简单很多,实际上都可以缩减为一句代码的事。如果是当作带符号整数来计算,则算法要复杂一下,要处理各种上溢出下溢出的情形。...所以一般情况下可以使用无符号整数来计算校验,简单快速。...127) assert((uchar_checksum(data2)&0xFF) == (char_checksum(data2)&0xFF)) print('OK') 上面的算法也很容易推广到两个字节或者四个字节的校验计算

2.7K10
领券