1

CRCジェネレーター100101を使用して5ビットCRCを実装しようとしました。ただし、このコードはハードウェアXorおよびシフトレジスタをCRCに反映していません。ハードウェアレベルでは、次のものがあります。

ここに画像の説明を入力してください

これをPythonでどのように実装できますか?

明確にするために、これを解決するためのアプローチとして、ビット単位のxorおよびshift演算子<<を処理するコードがあるかどうか疑問に思いました。

4

3 に答える 3

3

あなたが何を求めているのかわかりません-あなたのコードはこれまでのところうまく見えており、あなたが述べているように、それは正しい結果をもたらします。

標準ライブラリのcollections.dequeデータ構造を指摘することができます。これは、rotate()まさにこの種の循環シフトを実行する方法を提供するため、シフトレジスタを表すのに非常に便利です。

このコードは、コードと同じ結果をもたらします。

from collections import deque

deque_crc = deque([0,0,0,0,0],maxlen=5)

myID.extend(deque_crc)

for x in myID:
    deque_crc.rotate(-1)
    deque_crc[2] = (deque_crc[2] + deque_crc[4]) % 2
    deque_crc[4] = (deque_crc[4] + x) % 2

myID[-5:] = deque_crc

print myID

編集:

アルゴリズムのビット単位の実装を求めているので、これらのソースをチェックアウトすることをお勧めします。

于 2013-03-04T18:35:06.683 に答える
1

(実装を研究するのではなく)CRCコードを実際に使用したい場合は、Pythoncrcmodモジュールが非常に役立つことがあります。何年も使っていますが、とても使いやすいです。多項式を投入して、データを処理するためのCRC関数を準備するだけです。

ただし、5ビットCRC多項式をサポートしていない場合があります。

于 2013-03-05T08:34:28.447 に答える
0

ただし、このコードはハードウェアXorおよびシフトレジスタをCRCに反映していません。

します!

これ:

CRC[0] = CRC[1]
CRC[1] = CRC[2]
CRC[2] = CRC[3]
CRC[3] = CRC[4]
CRC[4] = input

シフトレジスタのモデルです

これ(Something+1) %2は、XOR演算を表す1つの方法です。

私はあなたがあなたが示す図をかなり正確にモデル化したと主張するでしょう!

于 2013-03-06T12:01:10.833 に答える