<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > CRC位域單表查表及建表方法

          CRC位域單表查表及建表方法

          作者: 時(shí)間:2016-12-02 來源:網(wǎng)絡(luò) 收藏
          CRC位域8每表256個元素,適合以字節(jié)為存儲單位,故程序的入口參數(shù)用數(shù)組即表指針替代,如:
          網(wǎng)上的左移CRC16查表核心程序?yàn)?crcbuff為大端存儲模式):
          unsigned int GetCRCL16(unsigned int crcinit, unsigned char *crcbuff)
          {//(可以不要初值crcinit,多字節(jié)CRC16時(shí)入口需要對crcval做處理)
          unsigned int i, crc=0;
          for(i = 0;i < 2;i ++)//2個字節(jié)位域8只需要2次完成
          {
          crc = (crc << 8) ^ CRCL16_Col[(((crcinit ^ crc) >> 8) ^ *crcbuff++) & 0xFF];//位域?qū)?單表256個字節(jié)
          crcinit <<= 8;//下一位域的初值
          }
          return crc;
          }
          網(wǎng)上的右移CRC16查表核心程序?yàn)?crcbuff為小端存儲模式):
          unsigned int GetCRCR16(unsigned int crcinit, unsigned char *crcbuff)
          {//(可以不要初值crcinit,多字節(jié)CRC16時(shí)入口需要對crcval做處理)
          unsigned int i, crc=0;
          for(i = 0;i < 2;i ++)//2個字節(jié)位域8只需要2次完成
          {
          crc = (crc >> 8) ^ CRCR16_Col[((crcinit ^ crc) ^ *crcbuff++) & 0xFF];//位域?qū)?單表256個字節(jié)
          crcinit >>= 8;//下一位域的初值
          }
          return crc;
          }
          網(wǎng)上的左移CRC32查表核心程序?yàn)?crcbuff為大端存儲模式):
          unsigned long GetCRCL32(unsigned long crcinit, unsigned char *crcbuff)
          {//(可以不要初值crcinit,多字節(jié)CRC32時(shí)入口需要對crcval做處理)
          unsigned long i, crc=0;
          for(i = 0;i < 4;i ++)//4個字節(jié)位域8只需要4次完成
          {
          crc = (crc << 8) ^ CRCL32_Col[(((crcinit ^ crc) >> 24) ^ *crcbuff++) & 0xFF];//位域?qū)?單表256個字節(jié)
          crcinit <<= 8;//下一位域的初值
          }
          return crc;
          }
          網(wǎng)上的右移CRC32查表核心程序?yàn)?crcbuff為小端存儲模式):
          unsigned long GetCRCR32(unsigned long crcinit, unsigned char *crcbuff)
          {//(可以不要初值crcinit(一般為0或0xFFFFFFFF),多字節(jié)CRC32時(shí)入口需要對crcval做處理)
          unsigned long i, crc=0;
          for(i = 0;i < 4;i ++)//4個字節(jié)位域8只需要4次完成
          {
          crc = (crc >> 8) ^ CRCR32_Col[((crcinit ^ crc) ^ *crcbuff++) & 0xFF];//位域?qū)?單表256個字節(jié)
          crcinit >>= 8;//下一位域的初值
          }
          return crc;
          }
          CRC位域單表查表方法可以應(yīng)用于任何CRC查表方法,它結(jié)合了傳統(tǒng)的移位算法和查表方法的各自優(yōu)點(diǎn),
          充分考慮了空間和速度之間的關(guān)系,對小容量及速度要求的單片機(jī)特別適用。
          由于位域可等長或不等長,故將可派生為更多“稀有”的查表方法,對加密算法比較有用。
          像CRC10,CRC12這種“非字節(jié)”存儲的CRC查表,可用位域2(CRC10)及位域3和位域4位域6等方法。
          總之位域4是更為普遍的壓縮CRC表格的好方法,位域?qū)挾却髣t循環(huán)次數(shù)少速度更快。
          網(wǎng)上流行的一般為位域8,自然速度最快,但表格空間最大。
          本文給出了如何建立數(shù)組及查表程序及相應(yīng)的移位算法程序,這里不是“比拼”,而是探討更多的查表方法。
          此法是菜農(nóng)多年對CRC研究的結(jié)果和總結(jié)。
          具體應(yīng)用:
          CRC64ISO(d800000000000000)的16四字表長查表程序
          CRC64ECMA(42F0E1EBA9EA3693)的16四字表長查表程序
          CRC32IEEE(EDB88320)的16雙字表長查表程序
          CRC16CCITT(1021)的16字表長查表程序
          CRC-16-IBM(A001)的16字表長查表程序
          1-Wire中CRC8的16字節(jié)表長查表程序
          SMBUS中PEC(CRC)16字節(jié)表長查表程序
          本文計(jì)算工具:[url=http://[color=]
          菜農(nóng)HotPower@126.com 2009.10.18 于雁塔菜地
          上一頁 1 2 3 下一頁

          關(guān)鍵詞: CRC位域單表查表建表方

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();