![]() |
|
教學公告
CRC(cyclical redundancy check) 循環冗余校驗,在《計算機組成原理》里面有這個知識點。類似的校驗有奇偶校驗、校驗和校驗。
可以簡單的理解成在發送數據后面加上這個驗證碼,判斷前面數據是否正確。
接收方如何檢查收到的信息有無錯誤(一個簡單通俗的模型) 首先接收方和發送方約定一個“生成多項式”g(x);
生成多項式的選取是個很有難度的問題,如果選的不好,那么檢出錯誤的概率就會低很多。好在這個問題已經被專家們研究了很長一段時間了,對于我們這些使用者來說,只要把現成的成果拿來用就行了。在本次課程上,我們寫一個簡單的程序來生成CRC碼,然后做驗證。
模板:
#include
#include
#include
#include
typedef unsigned char uchar;
typedef unsigned short ushort;
typedef unsigned int uint;
/************************************************************************/
/* 產生CRC16多項式(0x1021)的校驗碼(只能處理單個字節)
/************************************************************************/
void crc16_one_byte(const uchar data, ushort &crc)
{
}
/************************************************************************/
/* 產生CRC32多項式(0x04C11DB7)的校驗碼(只能處理單個字節)
/************************************************************************/
void crc32_one_byte(const uchar data, uint &crc )
{
}
/************************************************************************/
/* 產生CRC16多項式(0x1021)的校驗碼(能處理多個字節)
/* CRC32類似
/************************************************************************/
void crc16_multi_byte(const uchar data, ushort &crc)
{
}
/************************************************************************/
/* 得到發送的數據
/* 對應于CRC16校驗,CRC32類似
/************************************************************************/
void getSendData(const uchar data, char *sendData, ushort &crc16)
{
}
/************************************************************************/
/* 驗證接收到的數據
/* 對應于CRC16校驗,CRC32類似
/************************************************************************/
void checkout_data(char *sendData)
{
}
int main( void )
{
char sendData[10] = {0};
uchar data = 'a';
ushort crc16 = 0;
//得到CRC16的校驗碼
crc16_one_byte(data, 8, crc16);
//拼接得到需要發送的數據
getSendData(data, sendData, crc16);
//驗證數據
checkout_data(sendData);
return 0;
}