CRCジェネレーター100101を使用して5ビットCRCを実装しようとしました。ただし、このコードはハードウェアXorおよびシフトレジスタをCRCに反映していません。ハードウェアレベルでは、次のものがあります。
これをPythonでどのように実装できますか?
明確にするために、これを解決するためのアプローチとして、ビット単位のxorおよびshift演算子<<を処理するコードがあるかどうか疑問に思いました。
あなたが何を求めているのかわかりません-あなたのコードはこれまでのところうまく見えており、あなたが述べているように、それは正しい結果をもたらします。
標準ライブラリの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
編集:
アルゴリズムのビット単位の実装を求めているので、これらのソースをチェックアウトすることをお勧めします。
(実装を研究するのではなく)CRCコードを実際に使用したい場合は、Pythoncrcmodモジュールが非常に役立つことがあります。何年も使っていますが、とても使いやすいです。多項式を投入して、データを処理するためのCRC関数を準備するだけです。
ただし、5ビットCRC多項式をサポートしていない場合があります。
ただし、このコードはハードウェア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つの方法です。
私はあなたがあなたが示す図をかなり正確にモデル化したと主張するでしょう!