我试图用CRC生成器100101实现5位CRC。 但是,这段代码并不反映CRC中的硬件异或移位寄存器; 在硬件层面上,我们有以下几点:Python:使用xor和移位寄存器的CRC实现
怎么可以这样对蟒蛇实施?
作为一个澄清,我想知道是否有一些代码,以逐位异或交易和移位运算< <作为一种方法来解决这个
我试图用CRC生成器100101实现5位CRC。 但是,这段代码并不反映CRC中的硬件异或移位寄存器; 在硬件层面上,我们有以下几点:Python:使用xor和移位寄存器的CRC实现
怎么可以这样对蟒蛇实施?
作为一个澄清,我想知道是否有一些代码,以逐位异或交易和移位运算< <作为一种方法来解决这个
我不知道你问 - 你代码看起来很好,正如你所说的,它给出了正确的结果。
我可以指出你的标准库中的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代码(而不是研究它们的实现),您可能会发现Python crcmod模块非常有用。我一直在使用它很多年,它使用起来非常简单。只需投入多项式并准备好一个CRC函数来处理您的数据。
但它可能不支持5bit 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
是表示异或操作的一种方式。
我认为你已经非常准确地模拟了你展示的图表!
谢谢!作为一个澄清,我想知道是否有一些代码处理按位异或异或运算符<<作为解决这个问题的方法。但后来我想我不能处理我认为的名单。 (Python新手) – Ever 2013-03-04 19:12:52