2016-04-29 14 views
3

私は2種類のCRCアルゴリズムを見てきました。一方の種類は「直接」と呼ばれ、他方の種類は「非直接」または「間接」と呼ばれます。両方のコードは少し異なります。直接型に変換された初期値が指定されている場合、両方とも同じチェックサムを計算できます。直接CRCと間接CRCの違い

私は正常に両方のアルゴリズムを実行することができ、私は初期値を変換する方法を知っています。これは問題ありません。

私が見つけられなかったもの:なぜこれらの2つのアルゴリズムが存在するのですか?他の人ができないことができることはありますか?ユーザーの視点から見て重複していますか?

更新テスト可能なオンライン実装(および両方のアルゴリズムのC実装)hereを見つけることができます。しかし、これらの用語(またはその1つ)は、いくつかの場所で言及されています。等here等フォーラムにおけるマイクロコントローラの参照文書中の(「直接表アルゴリズム」)、

+1

あなたが参照している「直接」アルゴリズムと「間接」アルゴリズムのリファレンスを提供してください。私は多くのCRCを実装しましたが、私は前に使われたこれらの用語を見ていません。 –

+0

私の更新を見てください。これらの用語があいまいであるかどうかはわかりませんが、初期値が変換を必要としていることを多くのライターが参照しているので、これはCRCアルゴリズムの共通の特徴です。 – Silicomancer

答えて

1

「直接」Nビットの終了時処理をNゼロビットを回避する方法を参照していますCRC。

CRCの数学的定義は、nゼロビットが付加されたメッセージの除算です。余分な操作を避けるには、メッセージをCRCで排他的にするか、後でではなくCRCで操作します。これには、通常のバージョンのレジスタの初期値をCRCで処理し、それを新しい初期値にする必要があります。

これは不要なので、実際のCRCアルゴリズムでは余分な操作を行うことはありません。

詳細な説明については、リンクしているドキュメントの「10.テーブルの小さな実装」を参照してください。

+0

直接実世界アルゴリズムが初期値を必要に応じて変換しない場合はどうなりますか?私はそれが別の(間違った)チェックサムを計算すると仮定しますが、同じ間違いが一貫して行われる限り(同じハミング距離で)動作します...正しいのですか? – Silicomancer

+1

はい。結果は単に定数との排他的論理和です。 –