兩種CRC-16校驗的方法
阿新 • • 發佈:2019-02-07
轉載自:http://www.51hei.com/bbs/dpj-51955-1.html 查表法
https://zhidao.baidu.com/question/463053928.html 計演算法
兩種CRC校驗方法:查表法和計演算法。
16位CRC的多項式0x8005
查表法:即將256種可能全部列出,從表中查詢
特點:速度快,語句少,但表格佔用一定的程式空間。 *pucFrame 為待校驗資料首地址,usLen為待校驗資料長度。返回值為校驗結果。 USHORT usMBCRC16( UCHAR * pucFrame, USHORT usLen ) { UCHAR ucCRCHi = 0xFF;bit Crc_Check(ubyt *RSdata)
/***********功能說明********************************************
*傳送時,首先將要傳送的三個資料放在一個數組中
*然後呼叫crc_check(陣列名),則crc會自動放入指定陣列的後兩個單元中
*接收時,將收到的5個數據放在一個數組中
*然後呼叫crc_check(陣列名),若返回1表示校驗成功,資料可用
***************************************************************/
{
uint crc; //定義16位的CRC
ubyt i,j;
crc = 0xffff;
for( i=0; i<3; i++ ) //陣列前三個元素是真實資料
{
crc ^= *(RSdata+i);
for(j=8;j>0;j--)
{
if(crc & 0x0001) crc = (crc>>1) ^ 0xA001;
else crc >>= 1;
}
}
i=crc>>8;j=crc;
if((i==*(RSdata+3))&&(j==*(RSdata+4)))
return 1; //CRC校驗成功,返回1
else //CRC校驗失敗,將CRC存入陣列
{
*(RSdata+3) = i; //存放CRC的高八位;
*(RSdata+4) = j; //CRC低八位
return 0;
}
}