<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > CRC校驗源碼分析

CRC校驗源碼分析

作者: 時(shí)間:2012-05-16 來(lái)源:網(wǎng)絡(luò ) 收藏

 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,

本文引用地址:http://dyxdggzs.com/article/149046.htm

  0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,

  0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,

  0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,

  0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,

  0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,

  0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,

  0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,

  0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,

  0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0

  };

  根據這個(gè)思路,可以寫(xiě)出以下程序:

  uint table_crc(uchar *ptr,uchar len) // 字節查表法求

  {

  uchar da;

  while(len--!=0)

  {

  da=(uchar) (crc/256); // 以 8 位二進(jìn)制數暫存 的高 8 位

  crc=8; // 左移 8 位

  crc^=crc_ta[da^*ptr]; // 高字節和當前數據 XOR 再查表

  ptr++;

  }

  return(crc);

  }

  本質(zhì)上 計算的就是移位和異或。所以一次處理移動(dòng)幾位都沒(méi)有關(guān)系,只要做相應的處理就好了。

  下面給出半字節查表的處理程序。其實(shí)和全字節是一回事。

  code uint crc_ba[16]={

  0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,

  0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,

  };

  uint ban_crc(uchar *ptr,uchar len)

  {

  uchar da;

  while(len--!=0)

  {

  da = ((uchar)(crc/256))/16;

  crc = 4;

  crc ^=crc_ba[da^(*ptr/16)];

  da = ((uchar)(crc/256)/16);

  crc = 4;

  crc ^=crc_ba[da^(*ptr0x0f)];

  ptr++;

  }

  return(crc);

  }

  crc_ba[16]和crc_ta[256]的前 16 個(gè)余式是一樣的。

  其實(shí)講到這里,就已經(jīng)差不多了。反正當時(shí)我以為自己是懂了。結果去看別人的源代碼的時(shí)候,也是說(shuō)采用 CCITT,但是是反相的。如圖 3

  

  反過(guò)來(lái),一切都那么陌生,faint.吐血,吐血。

  仔細一下,也可以很容易寫(xiě)出按位異或的程序。只不過(guò)由左移變成右移。

  uint crc16r(unsigned char *ptr, unsigned char len)

  {

  unsigned char i;

  while(len--!=0)

  {

  for(i=0x01;i!=0;i = 1)

  {

  if((crc0x0001)!=0) {crc >>= 1; crc ^= 0x8408;}

  else crc >>= 1;

  if((*ptri)!=0) crc ^= 0x8408;



關(guān)鍵詞: 分析 源碼 校驗 CRC

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>