Python:使用xor和移位寄存器的CRC实现

时间:2013-03-04 17:09:01

标签: python hardware xor crc

我试图用CRC生成器100101实现5位CRC。 但是,此代码不反映CRC中的硬件Xor和移位寄存器; 在硬件方面,我们有以下内容:

enter image description here

如何在python上实现?

作为澄清,我想知道是否有一些代码处理按位xor和移位运算符<<作为解决这个问题的方法

3 个答案:

答案 0 :(得分: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

编辑:

由于您要求按位实施算法,因此您可能需要检查这些来源:

答案 1 :(得分:1)

如果您想真正使用CRC代码(而不是研究它们的实现),您可能会发现Python crcmod模块非常有用。我已经使用它多年了,它很容易使用。只需输入多项式并准备好CRC函数来处理数据。

但它可能不支持5位CRC多项式。

答案 2 :(得分:0)

  

但是,此代码不反映CRC中的硬件Xor和移位寄存器;

确实如此!

此:

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

移位寄存器的模型。

(Something+1) %2是表示XOR操作的一种方式。

我认为你已经非常准确地模拟了你所展示的图表!