1

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

在此处输入图像描述

这如何在 python 上实现?

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

4

3 回答 3

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

编辑:

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

于 2013-03-04T18:35:06.683 回答
1

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

然而,它可能不支持 5 位 CRC 多项式。

于 2013-03-05T08:34:28.447 回答
0

然而,这段代码并没有反映 CRC 中的硬件异或和移位寄存器;

确实如此!

这个:

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

移位寄存器的模型。

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

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

于 2013-03-06T12:01:10.833 回答