写一个crc校验码计算的函数
时间: 2023-09-02 16:09:32 浏览: 118
求CRC校验码的函数
下面是一个简单的 CRC 校验码计算函数的实现,以 CRC-16/CCITT 标准为例:
```python
def crc16_ccitt(data):
crc = 0xFFFF
for i in range(len(data)):
crc ^= ord(data[i]) << 8
for j in range(8):
if crc & 0x8000:
crc = (crc << 1) ^ 0x1021
else:
crc <<= 1
return crc & 0xFFFF
```
其中,参数 data 是待计算的二进制数据,返回值是 CRC 校验码。这个函数的实现过程如下:
1. 初始化 CRC 校验码为 0xFFFF。
2. 对于每个字节,依次进行以下操作:
1. 将当前字节左移 8 位,并与当前 CRC 校验码进行异或操作。
2. 对于每一位,判断当前 CRC 校验码最高位是否为 1:
- 如果是,将 CRC 校验码左移一位并异或 0x1021。
- 如果不是,将 CRC 校验码左移一位。
3. 返回 CRC 校验码的低 16 位。
注意,这里的 ord() 函数将字符转换为 ASCII 码,如果使用 Python 2.x 版本需要使用 chr() 函数代替。另外,CRC 校验码的计算方式与具体的标准有关,不同的标准可能使用不同的生成多项式和初始值。
阅读全文