本文目录一览

1,CRC16校验码如何计算

7E 00 05 60 31 32 33 计算CRC16结果应该是:5B3E 方法如下: CRC-16码由两个字节构成,在开始时CRC寄存器的每一位都预置为1,然后把CRC寄存器与8-bit的数据进行异或(异或:二进制运算 相同为0,不同为1;0^0=0;0^1=1;1^0=1;1^1=0), 之后对CRC寄存器从高到低进行移位,在最高位(MSB)的位置补零,而最低位(LSB,移位后已经被移出CRC寄存器)如果为1,则把寄存器与预定义的多项式码进行异或,否则如果LSB为零,则无需进行异或。重复上述的由高至低的移位8次,第一个8-bit数据处理完毕,用此时CRC寄存器的值与下一个8-bit数据异或并进行如前一个数据似的8次移位。所有的字符处理完成后CRC寄存器内的值即为最终的CRC值。 1.设置CRC寄存器,并给其赋值FFFF(hex)。 2.将数据的第一个8-bit字符与16位CRC寄存器的低8位进行异或,并把结果存入CRC寄存器。 3.CRC寄存器向右移一位,MSB补零,移出并检查LSB。 4.如果LSB为0,重复第三步;若LSB为1,CRC寄存器与多项式码相异或。 5.重复第3与第4步直到8次移位全部完成。此时一个8-bit数据处理完毕。 6.重复第2至第5步直到所有数据全部处理完成。 7.最终CRC寄存器的内容即为CRC值。 CRC(16位)多项式为 X16+X15+X2+1,其对应校验二进制位列为1 1000 0000 0000 0101。

CRC16校验码如何计算

2,CRC16MODBUS计算详细步骤

CRC-16/MODBUS 校验位计算 - CSDN博客CRC-16 / MODBUS 校验计算方法
1) 预置 1 个 16 位的寄存器为十六进制ffff(即全为 1) , 称此寄存器为 crc寄存器。 2) 把第一个 8 位二进制数据 (通信信息帧的第一个字节) 与 16 位的 crc寄存器的低 8 位相异或, 把结果放于 crc寄存器。 3) 把 crc 寄存器的内容右移一位( 朝低位)用 0 填补最高位, 并检查右移后的移出位。 4) 如果移出位为 0, 重复第 3 步 ( 再次右移一位); 如果移出位为 1, crc 寄存器与多项式a001 ( 1010 0000 0000 0001) 进行异或。 5) 重复步骤 3 和步骤 4, 直到右移 8 次,这样整个8位数据全部进行了处理。 6) 重复步骤 2 到步骤 5, 进行通信信息帧下一个字节的处理。 7) 将该通信信息帧所有字节按上述步骤计算完成后,得到的16位crc寄存器的高、低字节进行交换。 8) 最后得到的 crc寄存器内容即为 crc码。 private function get_crc16(byval crc16_num as byte(), byval nlength as byte) as ushort dim i, j as ushort dim crc as ushort crc = &hffff for i = 0 to nlength - 1 step 1 crc = crc xor crc16_num(i) for j = 0 to 7 step 1 if (crc and &h1) > 0 then crc = crc >> 1 crc = crc xor &ha001 else crc = crc >> 1 end if next j next i return crc end function

CRC16MODBUS计算详细步骤

3,C语言零基础怎么用C语言实现CRC16检验码

1.系统先把所有的float转换为double类型运算,最终得到的结果截取前七个作为有效数字,这样做可以使计算结果更准确。 2.有效数字:从左边第一个不是0的数字起,到精确到的位数止,所有的数字都叫做这个数的有效数字。比如:1.24的有效数字就是 1、2、4。0.24 的有效数字就是 2、4。 3. 同样的二进制数,假定你定义有符号(signed)类型,则第一位表示的是正负号,0代表正数,1代表负数;而如果定义无符号型(unsigned)的话,第一位为值了。 4.如果用指数表示,float类型有效数字为6~7位。double类型为15~16位,具体跟数字有关。 5.这个你是在哪看的啊,不对! 整形常量分为十进制、八进制、十六进制: 八进制形式为012前面有个零,十六进制为0x12前面有个0x(注意x前面是零), 而在一个八进制数字前面加\表示是字符型常量,例如\012为ASCII码为10的字符! 这是我逐字敲上去的,还希望您能采纳!
网站上的算法大都是查512字节表的,对单片机来讲,太浪费空间了。根据老古网上资料,修改并测试通过以下算法:unsigned int crc_ta[16]=0x0000,0x1021,0x2042,0x3063,0x4084,0x50a5,0x60c6,0x70e7,0x8108,0x9129,0xa14a,0xb16b,0xc18c,0xd1ad,0xe1ce,0xf1ef,};unsigned int crc16(unsigned char *ptr, unsigned char len) unsigned int crc;unsigned char da;crc=0;while(len--!=0) da=crc>>12; crc<<=4; crc^=crc_ta[da^(*ptr/16)]; da=crc>>12; crc<<=4; crc^=crc_ta[da^(*ptr&0x0f)]; ptr++;}return(crc);}

C语言零基础怎么用C语言实现CRC16检验码

4,crc16的校验码的算法

方法如下:CRC-16码由两个字节构成,在开始时CRC寄存器的每一位都预置为1,然后把CRC寄存器与8-bit的数据进行异或(异或:二进制运算 相同为0,不同为1;0^0=0;0^1=1;1^0=1;1^1=0), 之后对CRC寄存器从高到低进行移位,在最高位(MSB)的位置补零,而最低位(LSB,移位后已经被移出CRC寄存器)如果为1,则把寄存器与预定义的多项式码进行异或,否则如果LSB为零,则无需进行异或。重复上述的由高至低的移位8次,第一个8-bit数据处理完毕,用此时CRC寄存器的值与下一个8-bit数据异或并进行如前一个数据似的8次移位。所有的字符处理完成后CRC寄存器内的值即为最终的CRC值。
7e 00 05 60 31 32 33 计算crc16结果应该是:5b3e方法如下:crc-16码由两个字节构成,在开始时crc寄存器的每一位都预置为1,然后把crc寄存器与8-bit的数据进行异或(异或:二进制运算 相同为0,不同为1;0^0=0;0^1=1;1^0=1;1^1=0), 之后对crc寄存器从高到低进行移位,在最高位(msb)的位置补零,而最低位(lsb,移位后已经被移出crc寄存器)如果为1,则把寄存器与预定义的多项式码进行异或,否则如果lsb为零,则无需进行异或。重复上述的由高至低的移位8次,第一个8-bit数据处理完毕,用此时crc寄存器的值与下一个8-bit数据异或并进行如前一个数据似的8次移位。所有的字符处理完成后crc寄存器内的值即为最终的crc值。1.设置crc寄存器,并给其赋值ffff(hex)。 2.将数据的第一个8-bit字符与16位crc寄存器的低8位进行异或,并把结果存入crc寄存器。 3.crc寄存器向右移一位,msb补零,移出并检查lsb。 4.如果lsb为0,重复第三步;若lsb为1,crc寄存器与多项式码相异或。 5.重复第3与第4步直到8次移位全部完成。此时一个8-bit数据处理完毕。 6.重复第2至第5步直到所有数据全部处理完成。 7.最终crc寄存器的内容即为crc值。crc(16位)多项式为 x16+x15+x2+1,其对应校验二进制位列为1 1000 0000 0000 0101。

5,消息摘要算法的简介

消息摘要算法的主要特征是加密过程不需要密钥,并且经过加密的数据无法被解密,只有输入相同的明文数据经过相同的消息摘要算法才能得到相同的密文。消息摘要算法不存在密钥的管理与分发问题,适合于分布式网络上使用。由于其加密计算的工作量相当可观,所以以前的这种算法通常只用于数据量有限的情况下的加密,例如计算机的口令就是用不可逆加密算法加密的。近年来,随着计算机性能的飞速改善,加密速度不再成为限制这种加密技术发展的桎梏,因而消息摘要算法应用的领域不断增加。现在,消息摘要算法主要应用在“数字签名”领域,作为对明文的摘要算法。著名的摘要算法有RSA公司的MD5算法和SHA-1算法及其大量的变体。
1、crc8、crc16、crc32crc(cyclic redundancy check,循环冗余校验)算法出现时间较长,应用也十分广泛,尤其是通讯领域,现在应用最多的就是 crc32 算法,它产生一个4字节(32位)的校验值,一般是以8位十六进制数,如fa 12 cd 45等。crc算法的优点在于简便、速度快,严格的来说,crc更应该被称为数据校验算法,但其功能与数据摘要算法类似,因此也作为测试的可选算法。在 winrar、winzip 等软件中,也是以 crc32 作为文件校验算法的。一般常见的简单文件校验(simple file verify – sfv)也是以 crc32算法为基础,它通过生成一个后缀名为 .sfv 的文本文件,这样可以任何时候可以将文件内容 crc32运算的结果与 .sfv 文件中的值对比来确定此文件的完整性。与 sfv 相关工具软件有很多,如magicsfv、moosfv等。2、md2 、md4、md5这是应用非常广泛的一个算法家族,尤其是 md5(message-digest algorithm 5,消息摘要算法版本5),它由md2、md3、md4发展而来,由ron rivest(rsa公司)在1992年提出,被广泛应用于数据完整性校验、数据(消息)摘要、数据加密等。md2、md4、md5 都产生16字节(128位)的校验值,一般用32位十六进制数表示。md2的算法较慢但相对安全,md4速度很快,但安全性下降,md5比md4更安全、速度更快。在互联网上进行大文件传输时,都要得用md5算法产生一个与文件匹配的、存储md5值的文本文件(后缀名为 .md5或.md5sum),这样接收者在接收到文件后,就可以利用与 sfv 类似的方法来检查文件完整性,绝大多数大型软件公司或开源组织都是以这种方式来校验数据完整性,而且部分操作系统也使用此算法来对用户密码进行加密,另外,它也是目前计算机犯罪中数据取证的最常用算法。与md5 相关的工具有很多,如 winmd5等。3、sha1、sha256、sha384、sha512sha(secure hash algorithm)是由美国专门制定密码算法的标准机构—— 美国国家标准技术研究院(nist)制定的,sha系列算法的摘要长度分别为:sha为20字节(160位)、sha256为32字节(256位)、 sha384为48字节(384位)、sha512为64字节(512位),由于它产生的数据摘要的长度更长,因此更难以发生碰撞,因此也更为安全,它是未来数据摘要算法的发展方向。由于sha系列算法的数据摘要长度较长,因此其运算速度与md5相比,也相对较慢。sha1的应用较为广泛,主要应用于ca和数字证书中,另外在互联网中流行的bt软件中,也是使用sha1来进行文件校验的。4、ripemd、panama、tiger、adler32 等ripemd是hans dobbertin等3人在对md4,md5缺陷分析基础上,于1996年提出来的,有4个标准128、160、256和320,其对应输出长度分别为16字节、20字节、32字节和40字节。tiger由ross在1995年提出。tiger号称是最快的hash算法,专门为64位机器做了优化。

6,java中CRC算法是个什么东东

CRC算法实现有2种方法,一、查表法,二、直接计算,查表法的计算速度相对来说比较快,本人介绍的方法是直接计算法,用了2种方法实现,都是面向对象进行算法的封装。package com.wms.serial;/*** @author linduo* @version 2006/08/25*/public class CRC16 public int value; public CRC16() value = 0; } /** update CRC with byte b */ public void update(byte aByte) int a, b; a = (int) aByte; for (int count = 7; count >=0; count--) a = a << 1; b = (a >>>8) & 1; if ((value & 0x8000) != 0) value = ((value << 1) + b) ^ 0x1021; } else value = (value << 1) + b; } } value = value & 0xffff; return; } /** reset CRC value to 0 */ public void reset() value = 0; } public int getValue() return value; } public static void main(String[] args) CRC16 crc16 = new CRC16(); byte[] b = new byte[] //(byte) 0xF0,(byte)0xF0,(byte)0xF0,(byte)0x72 (byte) 0x2C,(byte)0x00,(byte)0xFF,(byte)0xFE ,(byte) 0xFE,(byte)0x04,(byte)0x00,(byte)0x00 ,(byte) 0x00,(byte)0x00 }; for (int k = 0; k < b.length; k++) crc16.update(b[k]); } System.out.println(Integer.toHexString(crc16.getValue())); System.out.println(Integer.toHexString(b.length));}}package com.wms.serial;public class CRC162 public static final void main(String[] args) CRC162 crc16 = new CRC162(); byte[] b = new byte[] //(byte) 0xF0,(byte)0xF0,(byte)0xF0,(byte)0x72 (byte) 0x2C,(byte)0x00,(byte)0xFF,(byte)0xFE ,(byte) 0xFE,(byte)0x04,(byte)0x00,(byte)0x00 ,(byte) 0x00,(byte)0x00 }; System.out.println(Integer.toHexString(crc16.encode(b))); //再把这个2f49替换成b数组的最后两个字节的数组,生成一个新的数组b2 byte[] b2 = new byte[] //(byte) 0xF0,(byte)0xF0,(byte)0xF0,(byte)0x72 (byte) 0x2C,(byte)0x00,(byte)0xFF,(byte)0xFE ,(byte) 0xFE,(byte)0x04,(byte)0x00,(byte)0x00 ,(byte) 0x2f,(byte)0x49 }; System.out.println(Integer.toHexString(crc16.encode(b2))); //算出来是 0 //你可以自已构造一些byte进行加解密试试}public short encode(byte[] b) short CRC_x = 0; int pp = 65536; // 1<<16; int pp2 = 69665; // (1<<16) + (1<<12) + (1<<5) + 1 for(int i=0;i<b.length;i++) for(int j=0;j<8;j++) CRC_x = (short)((CRC_x<<1) + (((b[i]<<j)&0x80)>>7)); if((CRC_x/pp) == 1) CRC_x=(short)(CRC_x^pp2); } } } return CRC_x;}}
CRC校验码的基本思想是利用线性编码理论,在发送端根据要传送的k位二进制码序列,以一定的规则产生一个校验用的监督码(既CRC码)r位,并附在信息后边,构成一个新的二进制码序列数共(k+r)位,最后发送出去。在接收端,则根据信息码和CRC码之间所遵循的规则进行检验,以确定传送中是否出错。在数据存储和数据通讯领域,CRC无处不在:著名的通讯协议X.25的FCS(帧检错序列)采用的是CRC. CCITT,ARJ、LHA等压缩工具软件采用的是CRC32,磁盘驱动器的读写采用了CRC16,通用的图像存储格式GIF、TIFF等也都用CRC作为检错手段。 CRC的本质是模-2除法的余数,采用的除数不同,CRC的类型也就不一样。通常,CRC的除数用生成多项式来表示。最常用的CRC码的生成多项式有CRC16,CRC32.以CRC16为例,16位的CRC码产生的规则是先将要发送的二进制序列数左移16位(既乘以2^16)后,再除以一个多项式,最后所得到的余数既是CRC码,如下式所示,其中K(X)表示n位的二进制序列数,G(X)为多项式,Q(X)为整数,R(X)是余数(既CRC码)。K(X)>>16=G(x)Q(x)+R(x)求CRC码所采用模2加减运算法则,既是不带进位和借位的按位加减,这种加减运算实际上就是逻辑上的异或运算,加法和减法等价,乘法和除法运算与普通代数式的乘除法运算是一样,符合同样的规律。生成CRC码的多项式如下,其中CRC-16和CRC-CCITT产生16位的CRC码,而CRC-32则产生的是32位的CRC码接收方将接收到的二进制序列数(包括信息码和CRC码)除以多项式,如果余数为0,则说明传输中无错误发生,否则说明传输有误,关于其原理这里不再多述。用软件计算CRC码时,接收方可以将接收到的信息码求CRC码,比较结果和接收到的CRC码是否相同。CCITT推荐的高级数据链路控制规程HDLC的帧校验序列FCS中,使用CCITT-16即CRC16,其生成多项式为G(x)=x16+x12+x5+1,CRC-32的生成多项式为G(x)=x32+x26+x23+x22+x16+x11+x10+x16+x8+x7+x5+x4+x2+x+1
不懂。同楼主!

文章TAG:crc16算法  CRC16校验码如何计算  
下一篇