当前位置: 首页 > news >正文

超简单网站网站建设_app开发

超简单网站,网站建设_app开发,网站cn域名注册,江门百度网站快速优化一、CRC的形象理解 本文面向对CRC校验有一定基础的读者#xff0c;如果你不懂#xff0c;请戳这里。维基百科还有图解版的。 在CRC的具体实现中#xff0c;如果要计算CRC的数据很长#xff0c;一般都会用到寄存器#xff0c;用来保存当前的计算到的CRC#xff0c;循环计算… 一、CRC的形象理解 本文面向对CRC校验有一定基础的读者如果你不懂请戳这里。维基百科还有图解版的。 在CRC的具体实现中如果要计算CRC的数据很长一般都会用到寄存器用来保存当前的计算到的CRC循环计算到数据流结束以下给出了计算16位CRC的流程流程来源 假如数据流为4字节BYTE[3]、BYTE[2]、BYTE[1]、BYTE[0] 1)数据流左移16位低位补0将扩大后的数据流6字节高16位BYTE[3]、BYTE[2]放入一个长度为16的寄存器 2)如果寄存器的首位为1将寄存器左移1位(寄存器的最低位从下一个字节获得)再与生成多项式的简记式异或     否则仅将寄存器左移1位(寄存器的最低位从下一个字节获得) 3)重复第2步直到数据流6字节全部移入寄存器 4)寄存器中的值则为CRC校验码CRC[1]、CRC[0]。 但是这种方式有个缺点就是如果在被计算CRC的数据前即使出现了任意个0会得到相同的CRC也就是被除数前面加好多个0除以多项式之后得到的余数还是不变。那么CRC校验就无法检测出这种类型的数据修改了。。 于是真正实现CRC还引进了寄存器的预设值Preset寄存器一开始的值一般不为0。 网上有人自己手算了A的16-bit CRC-CCITT它就是相当于将预设值设为了0xFFFF注意这里是将预置值直接放到数据的前面然后进行手算和下面讲的预处理有出入来源 Calculation of the 16-bit CRC-CCITT for a one-byte message consisting of the letter “A”:                          Quotient  111100001110111101011001        poly       ------------------------------------------  10001000000100001 ) 1111111111111111010000010000000000000000                      10001000000100001                      -----------------       red bits are initial value                       11101111110111111      bold bits are message                       10001000000100001      blue bits are augmentation                       -----------------                        11001111100111100                        10001000000100001                        -----------------                         10001111000111010                         10001000000100001                         -----------------                          00001110000110110                          00000000000000000                          -----------------                           00011100001101100                           00000000000000000                           -----------------                            00111000011011000                            00000000000000000                            -----------------                             01110000110110001                             00000000000000000                             -----------------                              11100001101100010                              10001000000100001                              -----------------                               11010011010000110                               10001000000100001                               -----------------                                10110110101001110                                10001000000100001                                -----------------                                 01111101011011110                                 00000000000000000                                 -----------------                                  11111010110111100                                  10001000000100001                                  -----------------                                   11100101100111010                                   10001000000100001                                   -----------------                                    11011011000110110                                    10001000000100001                                    -----------------                                     10100110000101110                                     10001000000100001                                     -----------------                                      01011100000011110                                      00000000000000000                                      -----------------                                       10111000000111100                                       10001000000100001                                       -----------------                                        01100000000111010                                        00000000000000000                                        -----------------                                         11000000001110100                                         10001000000100001                                         -----------------                                          10010000010101010                                          10001000000100001                                          -----------------                                           00110000100010110                                           00000000000000000                                           -----------------                                            01100001000101100                                            00000000000000000                                            -----------------                                             11000010001011000                                             10001000000100001                                             -----------------                                              1001010001111001 CRC    Conversion of the binary value above to hexadecimal by segmenting the bits to nibbles:                          binary nibbles   1001 0100 0111 1001                          hexadecimal         9    4    7    9 二、CRC的现成算法和工具 当我认为把CRC弄清楚之后我在网上找它们的现成的实现发现了不少好东西 CRC校验hdl代码的生成工具 CRC计算工具 这两用的是同一套算法我用这套算法计算“A”的16bit-CRC时发现等于0xB915而不是上面手算的0x9479对这些算法进行分析后发现算法和手算的算法不一样该算法先将8位数据左移8位再和预置值异或然后把得到的值当作一个16位数据用最基本的计算方法计算其CRC。这种算法用C语言表述就是代码出处 [cpp] view plaincopy typedef unsigned __int16    INT16U;   #define CRC_SEED   0xFFFF   // 预置值   #define POLY16 0x1021  // 该位为简式书写 实际为0x11021   INT16U wiki_crc(unsigned char c){       INT16U rem;       INT16U tem;       remCRC_SEED;       tem(c8);   //关键的地方将数据先左移8位扩大256倍       remrem ^ tem;  //然后与预置值异或经过这个预处理之后的计算和手算的没两样       for(int j0;j8;j){           if(rem  0x8000){               remrem1;               remrem ^ POLY16;           }           else               remrem1;       }       return rem;   }   姑且将这套算法表述为CRC(data,preset)它是跟手算方法有区别的一种CRC计算方法但是还是能实现CRC的功能。所以我们把它当成正确的算法来使用。 三、算法的多样化 维基百科上对CRC的解释的最后列出了好多种CRC有CRC16-CCITTCRC32CRC16-IBM等等这些算法的区别主要是以下几点 1.预设值的不同有的是0xFFFF有的是0x1D0F这个值下面还会碰到。 2.一次性处理数据的位宽不同CRC32CRC16分别是32位和16位。 3.有的算法将算出来的CRC取反后再附在数据的末尾。比如crcCRC(data,preset)那么发送的数据是{data,!crc}。 4.校验的判断条件不同比如CRC(A,0xFFFF)0xB915如果发送{A,0xB915}那么CRC({A,0xB915},0xFFFF)0是符合我们对CRC的原理的理解的即判断数据是否完整就是看最后的校验值是否为0。如果将CRC取反再发送则发送{A,0x46EA}那么CRC({A,0x46EA},0xFFFF)0x1D0F注意这时候判断数据是完整就是看最后的校验值是否等于0x1D0F。 我至今仍然有着疑问到底0x1D0F是什么数字哪里都能碰到它我出于好奇还计算了CRC(A,0x1D0F)结果是0x9479这就是我们之前看到的手算的结果好奇怪。。
http://www.zqtcl.cn/news/707229/

相关文章:

  • 宜宾建设网站公众号怎么制作流程
  • 上海崇明网站建设崇信县门户网站首页
  • 北京手机版建站系统开发学网页设计需要什么学历
  • 英文网站备案互联网排名前十的公司2021
  • 网站外部外链建设如何开发wordpress主题
  • 个人网站首页内容辽宁省建设网站
  • 二建证从住房建设厅网站调出流程需求分析 网站
  • 鞋子网站模板做网站开发学什么软件
  • 网站建设的需求客户中企动力科技股份有限公司招聘
  • 小程序定制 seo营销seo托管公司
  • 杭州网站设计公司联系亿企邦网站建设在电访销售话术
  • 安康网站开发公司报价网站开发人员考核
  • 谷歌网站 百度清苑住房和城乡建设局网站
  • 南宁世尊商贸网站建设如何查看一个网站是否备案
  • h5手机网站怎么做搜索引擎关键词怎么选
  • 弱电网站源码工程造价建设信息网站
  • 村级网站模板做公司永久免费网站什么好
  • 厦门做网站培训安康市电梯公司
  • 江苏水利建设网站排行榜百度
  • 营销导向的企业网站优化wordpress制作企业
  • 株洲网站建设公司wordpress资讯类主题破解版
  • 网站导航栏设计要求wordpress直达按钮
  • 网站建设寻找可以途径网站制作的目的
  • 私募基金网站建设wordpress快讯插件
  • 无锡网站搜索引擎优化校园二级网站建设
  • 用vps刷网站流量要怎么做云主机开网站教程
  • 个体户经营异常如何网上解除深圳seo云哥
  • 网站建设科研申报书沧州网站建设定制价格
  • 家纺营销型网站wordpress演示数据
  • 中卫建设厅网站中国纪检监察报