CRC校驗的問題(c語言實現CRC校驗和)


1. 前面的數 7A 01 00,計算的結果是0X4920

2. 那么把數據CRC加上

3. 測試代碼,計算出來的結果對不上,什么情況?可是我把參考模型的全部都選了一遍,也對不上其中一個!!!

4. 換了套代碼,還是一樣的值,難道說,CRC檢驗的必須是雙數字節嗎?我輸入的是5個,或許我可以輸入6個測試一下,也不行

5. 去CRC官網看了一下

對比下代碼發現,CRC-16用的多項式應該是0XA001,總上所述,第3步的代碼是錯誤的。那么我有疑問,為啥第3步的代碼居然還有人在用?而且使用正確,我猜測那套產生自己的CRC,又檢驗自己的CRC,說起來是定制化的一套CRC,不是標准的CRC,所以那套CRC只能自產自銷,如果去校驗另外一個人產生的標准的CRC數據就會出錯了。

 

6. 下面是從gitHUB上下載的代碼實際測試可用。https://github.com/lammertb/libcrc

uint16_t crc_sick( const unsigned char *input_str, size_t num_bytes ) { uint16_t crc; uint16_t low_byte; uint16_t high_byte; uint16_t short_c; uint16_t short_p; const unsigned char *ptr; size_t a; crc = CRC_START_SICK; ptr = input_str; short_p = 0; if ( ptr != NULL ) for (a=0; a<num_bytes; a++) { short_c = 0x00FF & (uint16_t) *ptr; if ( crc & 0x8000 ) crc = ( crc << 1 ) ^ CRC_POLY_SICK; else                crc =   crc << 1; crc ^= ( short_c | short_p ); short_p = short_c << 8; ptr++; } low_byte = (crc & 0xFF00) >> 8; high_byte = (crc & 0x00FF) << 8; crc = low_byte | high_byte; return crc; } /* crc_sick */

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM