前言 我们经常碰到 CRC 这个概念,尤其是在通信领域。但是 CRC 的原理是什么呢?我们有必要了解一下。 理解 CRC,最为关键的就是理解 CRC 校验码的生成方法。 CRC 校验码生成方法是对原始数据采用特定的多项式(对应一个二进制数)进行模2除法运算,得到的余数即为 CRC 校验码。 CRC 校验码计算示例 由以上分析可知,既然除数是随机的,或者按标准选定,所以 CRC 校验的关键是如何求出余数,也就是 CRC 校验码。 下面以一个例子来具体说明整个过程。 常用CRC版本 CRC 校验码的生成关键是选择一个二进制多项式作为除数。 目前不同版本的 CRC 已经有标准的二进制多项式,下面给出常用 CRC 版本: 名称 多项式 表示法 应用举例 CRC-8 X8+X2+X+1 0x107 CRC-12 X12+X11+X3+X2+X
循环冗余校验码(CRC)的基本原理是:在K位信息码后再拼接R位的校验码,整个编码长度为N位,因此,这种编码也叫(N,K)码。 根据G(x)可以生成K位信息的校验码,而G(x)叫做这个CRC码的生成多项式。 1)移位:将原信息码(kbit)左移R位 (R是多项式的最高次幂,即在信息码的后面补上R个0) (2)相除:将(1)中移位好的编码作为被除数,将多项式看成二进制码作为除数(取异或),得到的R位余数就是CRC
Vite学习指南,基于腾讯云Webify部署项目。
目录 1、内部控件计算CRC校验 2、公式节点计算CRC校验 ---- CRC(循环冗余校验),是一种根据网络数据包或计算机文件等数据产生简短固定位数校验码的一种信道编码技术,主要用来检测或校验数据传输或者保存后可能出现的错误 关于CRC校验的实验原理这里不再赘述,百度上有很多的解析,本篇博文主要讲解在LabVIEW环境中如何实现CRC校验。 本篇博文介绍两种方法实现CRC校验:内部控件计算CRC校验和公式节点计算CRC校验。 软件计算(注意CRC高低位顺序)效果如下图所示: 1、内部控件计算CRC校验 使用内部控件计算CRC校验就是使用基本的运算组件实现算法计算过程。 实现代码如下所示: 2、公式节点计算CRC校验 使用公式节点计算CRC校验,这里主要依托于:公式节点。公式节点可以实现在程序框图上计算数学公式或者使用C语言进行数值运算。
_crc1() end = time.clock() a = a + end - start print a _crc2() end = time.clock() a = a + end - start print a _crc3() end = time.clock() a = a + end - start print a else: print 'no com found' 输出的时间:crc1:1.76726367849 crc2:1.41187894711 crc3:1.80825700785 第一种方法快于第三种慢于第二种
PHP crc32() 函数 实例 输出 crc32() 的结果: <?php $str = crc32("Hello World!"); printf("%un",$str); ? 定义和用法 crc32()函数计算一个字符串的 32 位 CRC(循环冗余校验)。 该函数可用于验证数据的完整性。 语法 crc32( _string_ ) ? ? 实例 1 在本实例中,我们将在使用以及不使用 “%u” 格式符的情况下,输出 crc32() 的结果(注意结果是相同的): <? php $str = crc32("Hello world!"); echo 'Without %u: '.$str." php $str = crc32("Hello world."); echo 'Without %u: '.$str."
目录 前言 CRC算法简介 CRC计算 CRC校验 CRC计算的C语言实现 CRC计算工具 总结 前言 最近的工作中,要实现对通信数据的CRC计算,所以花了两天的时间好好研究了一下,周末有时间整理了一下笔记 CRC参数模型 不知道你是否遇到过这种情况,同样的CRC多项式,调用不同的CRC计算函数,得到的结果却不一样,而且和手算的结果也不一样,这就涉及到CRC的参数模型了。 MMC模型 Modbus通信使用的是CRC-16/MODBUS参数模型 USB协议中使用的CRC-5/USB和CRC-16/USB模型 STM32自带的硬件CRC计算模块使用的是CRC-32模型 至于多项式的选择 CRC计算 好了,了解了CRC参数模型知识,下面手算一个CRC值,来了解CRC计算的原理。 问:原始数据:0x34,使用CRC-8/MAXIN参数模型,求CRC值? 接收端的校验有两种方式,一种是和CRC计算一样,在本地把接收到的数据和CRC分离,然后在本地对数据进行CRC运算,得到的CRC值和接收到的CRC进行比较,如果一致,说明数据接收正确,如果不一致,说明数据有错误
CRC是什么? ,使用组合逻辑就容易发生错误 */ crc[0]<=crc[7]^data; crc[1]<=crc[0]^crc[7]^data; crc[2]<=crc[1]^crc[7]^data; crc[3]<=crc[2]; crc[4]<=crc[3]; crc[5]<=crc[4]; crc[6]<=crc[5]; crc[7]<=crc[6]; end always ; //CRC校验开始控制 wire [7:0]crc_out; //串行CRC输出 wire crc_valid; //串行CRC输出有效信号 wire [5:0] num; CRC8 c0( . (crc_start), //CRC校验开始控制 .crc_out(crc_out), //串行CRC输出 .num(num), .crc_valid(crc_valid) //串行CRC输出有效信号
crc校验 crc校验常用的有CRC16和CRC32,在通信中用的比较多(modbus协议等),这里不详细介绍其原理了。 crc校验不同多项式,计算结果是不一样的。 文件crc校验 为了保证文件的完整性,可以通过一些方法来对文件进行校验,校验的方法也挺多,使用crc16、crc32是比较简答的方式。主要是针对升级文件、配置文件等。 接收设备重新计算收 * 到消息的 CRC,并与接收到的 CRC 域中的值比较,如果两值不同,则有误。 CRC16 =CRC16 >>1; if (tmp) CRC16=CRC16 ^ 0xa001; } *ptr++; } return ] = crc16Data & 0xff; p[stFileStat.st_size+1] = (crc16Data >> 8) & 0xff; crc16Data = crc16((unsigned
常用的生成多项式: CRC8 = x^8 + x^5 + x^4 + x^0 CRC-CCITT = x^16 + x^12 + x^5 + x^0 CRC16 = x^16 + x^15 + x^2 CRC校验码位数 = 生成多项式位数 - 1 (5)余数初始值 在计算CRC的开始,给CRC寄存器一个初始值。 02 示例 本例给出一个bit level的8位CRC校验码的计算(此算法可以用于CRC查表法中表格的生成)。 计算出的CRC校验码附在原数据帧后面,接收端以模2除法除以多项式,没有余数,则数据无误。 原文网址:http://www.ross.net/crc/download/crc_v3.txt
本篇文章,完全是用来记录代码用的,目的是使用Python,基于Tkinter编写crc校验工具。 self): #创建主窗口,用于容纳其它组件 self.root = Tkinter.Tk() #给主窗口设置标题内容 self.root.title("获取bin文件的crc (cCRC,szData,rLen) tLen += rLen if tLen = iFileLen: break print "crc is %x\n ) if __name__ == '__main__': main() 出差必备 买火车票、高铁票、机票,订酒店都打9折的出行工具TRIP,点击注册 到此这篇关于Python基于Tkinter编写crc 校验工具的文章就介绍到这了,更多相关Python实现crc校验内容请搜索ZaLou.Cn以前的文章或继续浏览下面的相关文章希望大家以后多多支持ZaLou.Cn!
,是这样的: 发送端,在要传输的【文本数据】帧上,利用 CRC 函数,算出【CRC校验码】,并把这串数字附在【文本数据】帧上。 数据接收方,基于同样的 CRC 函数,输入【文本数据】,生成新的校验数字,和附带的 CRC 校验码,做对比。若有差异,说明数据有变动。 当然,原理上,CRC 并不简单。 从 stackoverflow 看到,有人用 SQL 实现了 CRC,感受下: Declare @input as varchar(1000) Set @input='This is the CRC = (@crc / 256) ^ @tblval Set @i = @i + 1 End Set @crc = ~@crc SELECT @crc as CRC32, CONVERT( VARBINARY(4), @crc) as CRC32Hex 摘自:https://stackoverflow.com/questions/331157/does-sql-server-checksum-calculate-a-crc-if-not-how-can-i-get-ms-sql-to-calcula
, http://ghsi.de/CRC/index.php? Polynom=100000111&Message=A1FC40503E8011, http://depa.usst.edu.cn/chenjq/www2/wl/software/crc/CRC_Javascript -8' defcreate(self,input): crc8 = crcmod.predefined.Crc(self.module) hexData = input = hex(crc8.crcValue) #print result return result if __name__=="__main__": crc =CRCGenerator () crc.create('aaaa') 代码很简单,但有个问题,就是标红色的那一行,因为刚开始没怎么看文档,crc.create("aaaa")产生的结果是“0x2D”,比较了一下发现,默认把
python计算CRC16等 智能电能表数据通信协议DL/T 645 - 2007;本部分实现了该协议的部分功能。 temper=('00'+temper).upper()[-2:] h=h+temper ##返回减0x33后的数据 return h ''' 计算16进制字符串的CRC16 校验 @Source 2013-5-10 11:00 ''' def CRC16(s): h='0' for i in range(len(s)/2): h=hex(int ) if len(h)<=1: h='00'+h return h.upper()[-2:] ##68AAAAAAAAAAAA681300DF16 ##print CRC16
1 byte crc8(byte[] buffer, int len) 2 { 3 byte crc, i, j; 4 crc = 0; 5 6 = 0; i <<= 1) 9 { 10 if (((crc & 0x01) ^ (buffer[j] & i)) == 1) 11 { 12 crc ^= 0x18; 13 crc >>= 1; 14 crc |= 0x80; 15 } 16 else 17 crc = (byte)(crc >> 1); 18 } 19 } 20 return crc; 21 } 22 byte crc8(byte[] buffer) 23 { 24 return
inflating: /u01/app/grid/Oeda/Software/Patches/database/19.8.0.0.200714/31219897/PatchSearch.xml bad CRC Elapsed = 12139 mS [0.0 minutes] Wed Dec 02 22:13:13 CST 2020]] [root@dbm11dbadm01 linux-x64]# 这种“bad CRC ”的错误,怀疑是对应的介质本身有问题,若尝试解压会发现解压过程中某个文件同样存在CRC报错,重新在MOS下载此压缩包,比对md5果然不一样,重新上传正确的文件再次执行不再报错,问题解决。
在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
扫码关注云+社区
领取腾讯云代金券