2013-03-04 254 views
1

我试图用CRC生成器100101实现5位CRC。 但是,这段代码并不反映CRC中的硬件异或移位寄存器; 在硬件层面上,我们有以下几点:Python:使用xor和移位寄存器的CRC实现

enter image description here

怎么可以这样对蟒蛇实施?

作为一个澄清,我想知道是否有一些代码,以逐位异或交易和移位运算< <作为一种方法来解决这个

回答

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 

编辑:

因为你所要求的按位执行的算法,你可能要检出这些来源:

+0

谢谢!作为一个澄清,我想知道是否有一些代码处理按位异或异或运算符<<作为解决这个问题的方法。但后来我想我不能处理我认为的名单。 (Python新手) – Ever 2013-03-04 19:12:52

1

如果您想真正使用CRC代码(而不是研究它们的实现),您可能会发现Python crcmod模块非常有用。我一直在使用它很多年,它使用起来非常简单。只需投入多项式并准备好一个CRC函数来处理您的数据。

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

0

然而,这种代码不会反映了硬件XOR和在CRC移位寄存器;

它的确如此!

此:

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

的移位寄存器的一个模式。

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

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