この一連の計算を C# で実装するのを手伝ってくれる人はいますか?
2 に答える
この問題は、基本的に 24 ビット多項式の CRC を記述します。
この問題は、シフト演算と XOR 演算、および 24 ビット (またはそれ以上) の変数を使用するだけで解決できます。bigint は必要ありません。
推奨される入門書:
これを機に手を出しました。多項式をメモリ内のデータ構造にマッピングできる方法はたくさんあるため、ソフトウェアでの実装のコンテキストで方程式を解釈するのは難しいです。他の実装。このコンテキストでは、バイト順序が MSB ファーストか LSB ファーストかが重要です... 8 の倍数ではないビット文字列を左または右に揃えるかどうかも重要です。多項式は X の累乗の昇順で示されることに注意してください。一方、バイトの左端のビットには最大のインデックスがあるため、左端のビットは X の最大の累乗に対応する必要があると想定されるかもしれませんが、それは規則ではありません。使用する。
基本的に、生成多項式を使用して CRC を計算するには、2 つの非常に異なるアプローチがあります。最初の、そして最も効率の悪い方法は、投稿された抜粋が示唆するように、任意精度の算術演算とモジュロを使用することです。より高速なアプローチには、多項式と排他的論理和の連続適用が含まれます。
Pascal での実装は、http: //jetvision.de/sbs/adsb/crc.htmにあります。C# への変換は簡単です。
より直接的なアプローチでは、メッセージと生成多項式を System.Numerics.BigInteger オブジェクトとして (C#/.Net 4.0 を使用して) エンコードし、上記のテキストが示唆するようにパリティ ビットを正確に計算する必要があります。適切にエンコードされた BigInteger の "%" 演算子。ここでの唯一の課題は、メッセージとパリティ ビットをアプリケーションに適した形式に変換することです。