余效介绍 了解余效的详细内容

展开全部CRC(Cyclic Redundancy Check)循环冗余校验码 是常用的校验码,在早期的通信中运用广泛,因为早期的通信技术不够可32313133353236313431303231363533e4b893e5b19e31333231623631靠(不可靠性的来源是通信技术决定的,比如电磁波通信时受雷电等因素的影响),不可靠的通信就会带来‘确认信息’的困惑,书上提到红军和蓝军通信联合进攻山下的敌军的例子,第一天红军发了条信息要蓝军第二天一起进攻,蓝军收到之后,发一条确认信息,但是蓝军担心的是‘确认信息’如果也不可靠而没有成功到达红军那里,那自己不是很危险?于是红军再发一条‘对确认的确认信息’,但同样的问题还是不能解决,红军仍然不敢冒然行动。 对通信的可靠性检查就需要‘校验’,校验是从数据本身进行检查,它依靠某种数学上约定的形式进行检查,校验的结果是可靠或不可靠,如果可靠就对数据进行处理,如果不可靠,就丢弃重发或者进行修复。 CRC码是由两部分组成,前部分是信息码,就是需要校验的信息,后部分是校验码,如果CRC码共长n个bit,信息码长k个bit,就称为(n,k)码。 它的编码规则是: 1、首先将原信息码(kbit)左移r位(k+r=n) 2、运用一个生成多项式g(x)(也可看成二进制数)用模2除上面的式子,得到的余数就是校验码。 非常简单,要说明的:模2除就是在除的过程中用模2加,模2加实际上就是我们熟悉的异或运算,就是加法不考虑进位,公式是: 0+0=1+1=0,1+0=0+1=1即‘异’则真,‘非异’则假。 由此得到定理:a+b+b=a 也就是‘模2减’和‘模2加’直值表完全相同。 有了加减法就可以用来定义模2除法,于是就可以用生成多项式g(x)生成CRC校验码。例如: g(x)=x4+x3+x2+1,(7,3)码,信息码110产生的CRC码就是: 10111101 | 110,0000 111 01 1 0100 1 1101 1001余数是1001,所以CRC码是110,1001标准的CRC码是,CRC-CCITT和CRC-16,它们的生成多项式是: CRC-CCITT=x16+x12+x5+1 CRC-16=x16+x15+x2+1*展开全部CRC,它的全称是“Cyclic Redundancy Check”,中文名是“循环冗余码”,"CRC校验"就是“循环冗余校验”。 CRC有什么用呢?它的应用e68a84e8a2ad3231313335323631343130323136353331333231623631范围很广泛,最常见的就是在网络传输中进行信息的校对。其实我们大可以把它应用到软件保护中去,因为它的计算是非常非常非常严格的。严格到什么程度呢?你的程序只要被改动了一个字节(甚至只是大小写的改动),它的值就会跟原来的不同。所以只要给你的“原”程序计算好CRC值,储存在某个地方,然后在程序中随机地再对文件进行CRC校验,接着跟第一次生成并保存好的CRC值进行比较,如果相等的话就说明你的程序没有被修改/破解过,如果不等的话,那么很可能你的程序遭到了病毒的感染,或者被Cracker用16进制工具暴力破解过了。我们先来看看CRC的原理。首先看两个式子:式一:9 / 3 = 3(余数 = 0)式二:(9 + 2 ) / 3 = 3 (余数 = 2)上面的两个式子可以用二进制计算为:式一:1001--> 90011---> 3---------0110--> 60011---> 3---------0011--> 30011---> 3---------0000--> 0,余数一共减了3次,所以商是3,而最后一次减出来的结果是0,所以余数为0式二:1011--> 110011---> 3---------1000--> 80011---> 3---------0101--> 50011---> 3---------0010--> 2,余数一共减了3次,所以商是3,而最后一次减出来的结果是2,所以余数为2 二进制减法运算的规则是,如果遇到0-1的情况,那么要从高位借1,就变成了(10+0)-1=1CRC运算有什么不同呢?让我们看下面的例子:这次用式子30 / 9,不过请读者注意最后的余数:11110--> 301001---> 9--------- 1100--> 12(很奇怪吧?为什么不是21呢?) 1001 ---> 9-------- 101--> 5,余数 --> the CRC!这个式子的计算过程是不是很奇怪呢?它不是直接减的,而是用XOR的方式来运算,最后得到一个余数。对啦,这个就是CRC的运算方法,明白了吗?CRC的本质是进行XOR运算,运算的过程我们不用管它,因为运算过程对最后的结果没有意义;我们真正感兴趣的只是最终得到的余数,这个余数就是CRC值。进行一个CRC运算我们需要选择一个除数,这个除数我们叫它为“poly”,宽度W就是最高位的位置,所以我刚才举的例子中的除数9,这个poly 1001的W是3,而不是4,注意最高位总是1。(别问为什么,这个是规定)如果我们想计算一个位串的CRC码,我们想确定每一个位都被处理过,因此,我们要在目标位串后面加上W个0位。现在让我们根据CRC的规范来改写一下上面的例子:Poly=1001,宽度W = 3位串Bitstring =11110Bitstring + W zeroes=11110 + 000 = 11110000111100001001||||-------------- 1100||| 1001|||------------- 1010|| 1001||------------ 0110| 0000|----------- 1100 1001---------- 101--> 5,余数 --> the CRC!还有两点重要声明如下:1、只有当Bitstring的最高位为1,我们才将它与poly进行XOR运算,否则我们只是将Bitstring左移一位。2、XOR运算的结果就是被操作位串Bitstring与poly的低W位进行XOR运算,因为最高位总为0。下面我讲讲具体怎么编程。 由于速度的关系,CRC的实现主要是通过查表法,对于CRC-16和CRC-32,各自有一个现成的表,大家可以直接引入到程序中使用。 这个表的C语言描述如下:for (i = 0; i < 256; i++){ crc = i; for (j = 0; j < 8; j++) { if (crc & 1) crc = (crc >> 1)^ 0xEDB88320; else crc >>= 1; } crc32tbl = crc;} 生成表之后,就可以进行运算了。我们的算法如下:1、将寄存器向右边移动一个字节。2、将刚移出的那个字节与我们的字符串中的新字节进行XOR运算,得出一个指向值表table[0..255]的索引。3、将索引所指的表值与寄存器做XOR运算。4、如果数据没有全部处理完,则跳到步骤1。这个算法的C语言描述如下:temp = (oldcrc ^ abyte) & 0x000000FF;crc= (( oldcrc >> 8) & 0x00FFFFFF) ^ crc32tbl[temp];return crc;www.shufadashi.com*�ɼ*�

余效

拼音:-----

答:天涯明月刀文士乐伶曲谱效果及余音效果一览;其中文士仅可使用【笛曲】,乐伶仅可使用【琴曲】。从表格可以看出,文士的余音效果偏防御,乐伶偏攻击。 如果你是平民,

解释:

1.犹后效。.

答:CRC校验是循环冗余校验,下面是C#的代码。 protected byte[] GetCRC(byte[] b, int offset, int len) { byte CRC16Lo = 0; byte CRC16Hi = 0; byte bytC; byte bytTreat; byte bytBcrc; for (int i = 0; i < len; i++) { bytC = b[i + offset];

展开全部如果是模2的幂的话,你完全可以用位运算代替,比如判断奇偶可以直接用a&1*展开全部他和除法效率差不多,一些特别的办法可以提高效率,就是利用计算机的位运算*展开全部不低。*www.shufadashi.com*ɼ*�