计网循环冗余检验
编程实现循环冗余检验 (CRC)
循环冗余检验 (CRC) 是一种常用的错误检测技术,特别适用于数据传输领域。它通过在数据流中附加一个固定长度的校验码来检测数据传输中的错误。下面是一个简单的 Python 示例,演示如何实现 CRC 校验:
```python
def crc_remainder(data, divisor):
添加 0 到数据末尾,使其与除数长度相等
data = data '0' * (len(divisor) 1)
remainder = data[:len(divisor)] 取数据的前 n 位作为初始余数
for i in range(len(data) len(divisor) 1):
XOR 余数和除数
if remainder[0] == '1':
remainder = ''.join(['1' if remainder[j] == divisor[j] else '0' for j in range(len(divisor))]) data[i len(divisor)]
else:
remainder = remainder[1:] data[i len(divisor)]
return remainder
def crc_encode(data, divisor):
计算 CRC 校验码
remainder = crc_remainder(data, divisor)
返回原始数据和 CRC 校验码的拼接结果
return data remainder
def crc_check(data, divisor):
检查数据是否正确
remainder = crc_remainder(data, divisor)
return '0' * (len(divisor) 1) == remainder
示例用法
data = '1101011011'
divisor = '1011'
encoded_data = crc_encode(data, divisor)
print("Encoded data (with CRC):", encoded_data)
模拟数据传输过程中出现错误
corrupted_data = '1101011111'
print("Is data correct?", crc_check(corrupted_data, divisor))
```
这个例子中,我们定义了三个函数:
`crc_remainder`: 计算给定数据和除数的余数。
`crc_encode`: 将数据编码为原始数据和 CRC 校验码的组合。
`crc_check`: 检查接收到的数据是否正确,返回布尔值。
你可以根据需要修改输入数据和除数,并使用这些函数来实现你的 CRC 检验。