1

比較がどのようにうまくいかないのかわかりませんが、私は問題に取り組んでいます。多項式長除算モジュロ 2 を実行しようとしています。

while len(binCrcGen) <= len(binPayload) and binPayload:
        if binPayload[0] == binCrcGen[0]:
                del binPayload[0]
                for j in range(len(binCrcGen)-1):
                        if binPayload[j] == binCrcGen[j+1]:
                                binPayload.insert(binPayload[j],0)
                                del binPayload[j+1]
                                print(binPayload, "binPayload")
                        else:
                                binPayload.insert(binPayload[j],1)
                                del binPayload[j+1]
                                print(binPayload, "binPayload")

ただし、私の出力は次のとおりです。

Input the binary data payload: 10010
Input the binary representation of the CRC generator: 11
[1, 0, 1, 0] binPayload
[1, 1, 0] binPayload
[1, 0] binPayload
[1] binPayload -- wrong here 1 xor 1 should bring 0 to list.
[1] Remainder
[1, 1] binCrCGen
The data transmitted with the payload 1001 is protected by the CRC 11 is 10011

手で計算すると、残りの 00 が得られ、空白のリストが削除されると空白のリストになります。

4

1 に答える 1

2

エラーは次の行にあります。

                                binPayload.insert(binPayload[j],0)
                                binPayload.insert(binPayload[j],1)

index に挿入していませんj。内容に応じて、インデックス 0 または 1 に挿入していますbinPayload[j]。これを修正するには、インデックスをjではなく に変更しますbinPayload[j]。あなたがそれをしている間、あなたが使用している奇妙な挿入/削除のものを削除して、単に使用することができますbinPayload[j] = whatever. また、exclusive-or 演算子^を使用して if/else を削除したり、インプレース バージョンを使用して^=繰り返しを節約したりできます。

binCrcGen  = [1,1]
binPayload = [1,0,0,1,0]

while len(binCrcGen) <= len(binPayload) and binPayload:
    if binPayload[0] == binCrcGen[0]:
        del binPayload[0]
        for j in range(len(binCrcGen)-1):
            binPayload[j] ^= binCrcGen[j+1]
        print(binPayload, "binPayload")
    while binPayload and binPayload[0] == 0:
        del binPayload[0]
        print(binPayload, "binPayload")
于 2013-09-18T06:36:38.173 に答える