首页 > 产品 > 经验 > crc32校验,JAVA CRC32校验问题

crc32校验,JAVA CRC32校验问题

来源:整理 时间:2025-01-29 18:47:12 编辑:智能门户 手机版

本文目录一览

1,JAVA CRC32校验问题

校验的双方是自己算出来的数和发布方公布的数做对比。你需要预先知道“发布方发布的效验码”或者“可能发生错误之前(比如传输之前)自己计算的效验码”然后if(crc.getValue()==official_crc) //一致,数据完整}else //不一致,数据不完整}

JAVA CRC32校验问题

2,计算机文件的32位循环冗余校验和CRC32是什么东西

比如A给B发文件fA发的文件为afB收到的文件为bf如何判断af==bf呢,也就是文件发送成功呢令文件af与一个数对应,bf与另一个数对应 只要两个数相同 那么af==bf,文件发送成功CRC32就是将文件对应为一个数的一种算法
我是来看评论的

计算机文件的32位循环冗余校验和CRC32是什么东西

3,java crc32校验 数据发送前如何添加校验位

b是需要检验的数据。getvalue是8位校验码,string类型。看api只有快是帧封装802.3么?
校验的双方是自己算出来的数和发布方公布的数做对比。你需要预先知道“发布方发布的效验码”或者“可能发生错误之前(比如传输之前)自己计算的效验码”然后if(crc.getvalue()==official_crc) //一致,数据完整}else //不一致,数据不完整}

java crc32校验 数据发送前如何添加校验位

4,Java中用crc32对数组进行校验

byte b[]=CRC32 c=new CRC32()c.update(b);System.out.print(c.getValue());//打印crc32的校验值
校验的双方是自己算出来的数和发布方公布的数做对比。你需要预先知道“发布方发布的效验码”或者“可能发生错误之前(比如传输之前)自己计算的效验码”然后if(crc.getvalue()==official_crc) //一致,数据完整}else //不一致,数据不完整}

5,在Java中用crc32对数组进行校验

java标准库中有啊!!CRC32 crc32 = new CRC32();byte[] data = new byte[128];for(byte i=0;i<data.length;i++) data[i] = i;}crc32.update(data);System.out.println(crc32.getValue());
byte b[]=crc32 c=new crc32()c.update(b);system.out.print(c.getvalue());//打印crc32的校验值

6,什么是CRC32校验

CRC32算法学习笔记以及如何用java实现 CRC32算法学习笔记以及如何用java实现 一:说明 论坛上关于CRC32校验算法的详细介绍不多。前几天偶尔看到Ross N. Williams的文章,总算把CRC32算法的来龙去脉搞清楚了。本来想把原文翻译出来,但是时间参促,只好把自己的一些学习心得写出。这样大家可以更快的了解CRC32的主要思想。由于水平有限,还恳请大家指正。原文可以访问:http://www.repairfaq.org/filipg/LINK/F_crc_v31.html 。 二:基本概念及相关介绍 2.1 什么是CRC 在远距离数据通信中,为确保高效而无差错地传送数据,必须对数据进行校验即差错控制。循环冗余校验CRC(Cyclic Redundancy Check/Code)是对一个传送数据块进行校验,是一种高效的差错控制方法。 CRC校验采用多项式编码方法。多项式乘除法运算过程与普通代数多项式的乘除法相同。多项式的加减法运算以2为模,加减时不进,错位,如同逻辑异或运算。 2.2 CRC的运算规则 CRC加法运算规则:0+0=0 0+1=1 1+0=1 1+1=0 (注意:没有进位) CRC减法运算规则: 0-0=0 0-1=1 1-0=1 1-1=0 CRC乘法运算规则: 0*0=0 0*1=0 1*0=0 1*1=1 CRC除法运算规则: 1100001010 (注意:我们并不关心商是多少。) _______________ 10011 ) 11010110110000 10011,,.,,.... -----,,.,,.... 10011,.,,.... 10011,.,,.... -----,.,,.... 00001.,,.... 00000.,,.... -----.,,.... 00010,,.... 00000,,.... -----,,.... 00101,.... 00000,.... -----,.... 01011.... 00000.... -----.... 10110... 10011... -----... 01010.. 00000.. -----.. 10100. 10011. -----. 01110 00000 ----- 1110 = 余数 2.3 如何生成CRC校验码 (1) 设G(X)为W阶,在数据块末尾添加W个0,使数据块为M+ W位,则相应的多项式为XrM(X); (2) 以2为模,用对应于G(X)的位串去除对应于XrM(X)的位串,求得余数位串; (3) 以2为模,从对应于XrM(X)的位串中减去余数位串,结果就是为数据块生成的带足够校验信息的CRC校验码位串。 2.4 可能我们会问那如何选择G(x) 可以说选择G(x)不是一件很容易的事。一般我们都使用已经被大量的数据,时间检验过的,正确的,高效的,生成多项式。一般有以下这些: 16 bits: (16,12,5,0) [X25 standard] (16,15,2,0) ["CRC-16"] 32 bits: (32,26,23,22,16,12,11,10,8,7,5,4,2,1,0) [Ethernet] 三: 如何用软件实现CRC算法 现在我们主要问题就是如何实现CRC校验,编码和解码。用硬件实现目前是不可能的,我们主要考虑用软件实现的方法。 以下是对作者的原文的翻译: 我们假设有一个4 bits的寄存器,通过反复的移位和进行CRC的除法,最终该寄存器中的值就是我们所要求的余数。 3 2 1 0 Bits +---+---+---+---+ Pop <-- | | | | | <----- Augmented message(已加0扩张的原始数据) +---+---+---+---+ 1 0 1 1 1 = The Poly (注意: The augmented message is the message followed by W zero bits.) 依据这个模型,我们得到了一个最最简单的算法: 把register中的值置0. 把原始的数据后添加r个0. While (还有剩余没有处理的数据) Begin 把register中的值左移一位,读入一个新的数据并置于register的0 bit的位置。 If (如果上一步的左移操作中的移出的一位是1) register = register XOR Poly. End 现在的register中的值就是我们要求的crc余数。 我的学习笔记: 可为什么要这样作呢?我们从下面的实例来说明: 1100001010 _______________ 10011 ) 11010110110000 10011,,.,,.... -----,,.,,.... -》 10011,.,,.... 10011,.,,.... -----,.,,.... -》 00001.,,.... 00000.,,.... -----.,,.... 00010,,.... 00000,,.... -----,,.... 00101,.... 00000,.... 我们知道G(x)的最高位一定是1,而商1还是商0是由被除数的最高位决定的。而我们并不关心商究竟是多少,我们关心的是余数。例如上例中的G(x)有5位。我们可以看到每一步作除法运算所得的余数其实就是被除数的最高位后的四位于G(x)的后四位XOR而得到的。那被除数的最高位有什么用呢?我们从打记号的两个不同的余数就知道原因了。当被除数的最高位是1时,商1然后把最高位以后的四位于G(x)的后四位XOR得到余数;如果最高位是0,商0然后把被除数的最高位以后的四位于G(x)的后四位XOR得到余数,而我们发现其实这个余数就是原来被除数最高位以后的四位的值。也就是说如果最高位是0就不需要作XOR的运算了。到这我们总算知道了为什么先前要这样建立模型,而算法的原理也就清楚了。 以下是对作者的原文的翻译: 可是这样实现的算法却是非常的低效。为了加快它的速度,我们使它一次能处理大于4 bit的数据。也就是我们想要实现的32 bit的CRC校验。我们还是假设有和原来一样的一个4 "bit"的register。不过它的每一位是一个8 bit的字节。 3 2 1 0 Bytes +----+----+----+----+ Pop <-- | | | | | <----- Augmented message +----+----+----+----+ 1<------32 bits------> (暗含了一个最高位的“1”) 根据同样的原理我们可以得到如下的算法: While (还有剩余没有处理的数据) Begin 检查register头字节,并取得它的值 求不同偏移处多项式的和 register左移一个字节,最右处存入新读入的一个字节 把register的值和多项式的和进行XOR运算 End 我的学习笔记: 可是为什么要这样作呢? 同样我们还是以一个简单的例子说明问题: 假设有这样的一些值: 当前register中的值: 01001101 4 bit应该被移出的值:1011 生成多项式为: 101011100 Top Register ---- -------- 1011 01001101 1010 11100 + (CRC XOR) ------------- 0001 10101101 首4 bits 不为0说明没有除尽,要继续除: 0001 10101101 1 01011100 + (CRC XOR) ------------- 0000 11110001 ^^^^ 首4 bits 全0说明不用继续除了。 那按照算法的意思作又会有什么样的结果呢? 1010 11100 1 01011100+ ------------- 1011 10111100 1011 10111100 1011 01001101+ ------------- 0000 11110001 现在我们看到了这样一个事实,那就是这样作的结果和上面的结果是一致的。这也说明了算法中为什么要先把多项式的值按不同的偏移值求和,然后在和register进行异或运算的原因了。另外我们也可以看到,每一个头字节对应一个值。比如上例中:1011,对应01001101。那么对于32 bits 的CRC 头字节,依据我们的模型。头8 bit就该有 2^8个,即有256个值与它对应。于是我们可以预先建立一个表然后,编码时只要取出输入数据的头一个字节然后从表中查找对应的值即可。这样就可以大大提高编码的速度了。 +----+----+----+----+ +-----< | | | | | <----- Augmented message | +----+----+----+----+ | ^ | | | XOR | | | 0+----+----+----+----+ v +----+----+----+----+ | +----+----+----+----+ | +----+----+----+----+ | +----+----+----+----+ | +----+----+----+----+ | +----+----+----+----+ +-----> +----+----+----+----+ +----+----+----+----+ +----+----+----+----+ +----+----+----+----+ +----+----+----+----+ 255+----+----+----+----+ 以下是对作者的原文的翻译: 上面的算法可以进一步优化为: 1:register左移一个字节,从原始数据中读入一个新的字节. 2:利用刚从register移出的字节作为下标定位 table 中的一个32位的值 3:把这个值XOR到register中。 4:如果还有未处理的数据则回到第一步继续执行。 用C可以写成这样: r=0; while (len--) r = ((r << 8) | p*++) ^ t[(r >> 24) & 0xFF]; 可是这一算法是针对已经用0扩展了的原始数据而言的。所以最后还要加入这样的一个循环,把W个0加入原始数据。 我的学习笔记: 注意不是在预处理时先加入W个0,而是在上面算法描述的循环后加入这样的处理。 for (i=0; i<< 8) ^ t[(r >> 24) & 0xFF]; 所以是W/4是因为若有W个0,因为我们以字节(8位)为单位的,所以是W/4个0 字节。注意不是循环w/8次 以下是对作者的原文的翻译: 1:对于尾部的w/4个0字节,事实上它们的作用只是确保所有的原始数据都已被送入register,并且被算法处理。 2:如果register中的初始值是0,那么开始的4次循环,作用只是把原始数据的头4个字节送入寄存器。(这要结合table表的生成来看)。就算register的初始值不是0,开始的4次循环也只是把原始数据的头4个字节把它们和register的一些常量XOR,然后送入register中。 3:(A xor B) xor C = A xor (B xor C) 总上所述,原来的算法可以改为: +-----+----+----+----+----+ +----+----+----+----+ +----+----+----+----+ +----+----+----+----+ +----+----+----+----+ 255+----+----+----+----+ 算法: 1:register左移一个字节,从原始数据中读入一个新的字节. 2:利用刚从register移出的字节和读入的新字节XOR从而产生定位下标,从table中取得相应的值。 3:把该值XOR到register中 4:如果还有未处理的数据则回到第一步继续执行。 我的学习笔记: 对这一算法我还是不太清楚,或许和XOR的性质有关,恳请大家指出为什么? 谢谢。 到这,我们对CRC32的算法原理和思想已经基本搞清了。下章,我想着重根据算法思想用java语言实现。
文章TAG:crc32校验java校验问题crc32校验CRC32校验问题

最近更新

  • 夏攀,我是歌手给李克勤拉二胡的是谁夏攀,我是歌手给李克勤拉二胡的是谁

    我是歌手给李克勤拉二胡的是谁2,游戏音乐制作公司哪家比较擅长制作中国武侠风格的游戏音乐3,高手帮帮忙求一首歌的MP3地址和视频4,我爱你夏攀哪位大哥帮我做一首藏头诗小弟感谢不进5,夏攀.....

    经验 日期:2025-01-29

  • Modbus通讯协议,MODBUS是什么意思及其有什么功能谢谢Modbus通讯协议,MODBUS是什么意思及其有什么功能谢谢

    MODBUS是什么意思及其有什么功能谢谢2,Modbus通讯协议的介绍3,什么是ModBus通讯协议4,什么是MoubusRTU通讯协议5,什么是modbus6,modbus协议是什么1,MODBUS是什么意思及其有什么功能谢谢modbu.....

    经验 日期:2025-01-29

  • capex,谁能解释一下CAPEX和OPEX是什么意思啊capex,谁能解释一下CAPEX和OPEX是什么意思啊

    谁能解释一下CAPEX和OPEX是什么意思啊2,CapexOpex口语怎么读3,国外土建工程项目的CAPEX成本是什么意思4,CAPEX和OPEX的意思是什么5,capex是什么意思6,光进铜退是什么意思1,谁能解释一下CAPEX.....

    经验 日期:2025-01-29

  • 电线功率计算公式,电线的功率是怎么算的啊电线功率计算公式,电线的功率是怎么算的啊

    电线的功率是怎么算的啊2,电线电缆所用功率是怎么算的3,电缆功率怎么计算4,电线的功率怎么算1,电线的功率是怎么算的啊你是想问电线传输电能的功率吧。单相交流电的话,P=U×I,如果是家用电器.....

    经验 日期:2025-01-29

  • 自动化设备基础知识填空题,非标自动化设备基础知识自动化设备基础知识填空题,非标自动化设备基础知识

    设计自动化设备需要东哪些知识?培训内容莆田自动化设备设计培训的内容主要包括以下几个方面:自动化设备基础知识:培训将介绍自动化设备的基本原理、工作方式以及常见的自动化控制系统等.....

    经验 日期:2025-01-29

  • IQM,且米属于哪个省IQM,且米属于哪个省

    且米属于哪个省2,罗托克ROTORK执行机构IQIQCIQM有什么区别3,沙特身份证IQM丢了但是我有护照和签证请问如果不补办沙4,IQM罗托克电动执行器资料有的给我下谢谢5,rotork电动执行机构IQM10F10.....

    经验 日期:2025-01-29

  • 电气自动化技术的前身,电气自动化技术和电力系统的不同?电气自动化技术的前身,电气自动化技术和电力系统的不同?

    电气自动化技术和电力系统自动化技术有什么区别?电气自动化的全称是电气自动化工程及其自动化。1.电气自动化技术:本专业培养从事与电气工程相关的系统运行自动控制、电力电子技术、信.....

    经验 日期:2025-01-29

  • 硬线与软线的接法,多根硬线与软线的接法硬线与软线的接法,多根硬线与软线的接法

    多根硬线与软线的接法2,25平软线电缆和硬线电缆怎样连接3,软硬电线怎么连4,电工知识软线和硬线怎么接一起5,铜芯硬线与铜芯软线怎么接头6,电工接线的方式有几种1,多根硬线与软线的接法别的方.....

    经验 日期:2025-01-29