我试图用CRC生成器100101实现5位CRC。 但是,此代码不反映CRC中的硬件Xor和移位寄存器; 在硬件方面,我们有以下内容:
如何在python上实现?
作为澄清,我想知道是否有一些代码处理按位xor和移位运算符<<作为解决这个问题的方法
答案 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操作的一种方式。
我认为你已经非常准确地模拟了你所展示的图表!