1

CRC を計算するコードを見つけましたが、概念がわかりません。コードは次のとおりです。

count =128 and ptr=some value;

calcrc(unsigned char *ptr, int count) { unsigned short crc; unsigned char i; crc = 0; while (--count >= 0) { crc = crc ^ (unsigned short)*ptr++ << 8; i = 8; do { if (crc & 0x8000) crc = crc << 1 ^ 0x1021; else crc = crc << 1; } while(--i); } return (crc); }

誰かが説明して、論理を教えてください。

4

4 に答える 4

4

これはCRCのように見えます (具体的には、802.15.4、X.25、V.41、CDMA、Bluetooth、XMODEM、HDLC、PPP、および IrDA などで使用される CRC-16-CCITT のように見えます)。リンク先のウィキペディアのページで CRC 理論を読み、さらに洞察を得ることができます。または、これを、チェックサムの計算の問題を解決するだけの「ブラック ボックス」と見なすこともできます。

于 2009-05-11T11:09:36.753 に答える
3

CRC に関する 1 つの有名なテキストは、Ross Williams による「CRC エラー検出アルゴリズムへの簡単なガイド」です。吸収するのに少し時間がかかりますが、それはかなり徹底的です。

于 2009-05-11T11:53:24.540 に答える
3

おそらく、C では、^ 演算子はビット単位の XOR演算子であり、<< 演算子は左シフト演算子 (演算子の右側にある 2 の累乗に等しい) であることを知っておく必要があります。また、crc & 0x8000 式は、変数 crc の最上位ビット セットをテストしています。これは、これが実行されたときに何が起こっているかについての低レベルの説明を理解するのに役立ちます。CRC とは何か、なぜそれが必要なのかについての高レベルの説明については、ウィキペディアのページまたはHow Stuff Worksを読んでください。

于 2009-05-11T11:38:58.373 に答える
1

チェックサムアルゴリズムを推測するにはどうすればよいですか?に対する私の回答を見てください 。

于 2009-11-12T13:47:09.360 に答える