crc校验码计算python代码
时间: 2023-09-02 17:12:00 浏览: 121
以下是CRC校验码计算的Python代码:
```
import binascii
def crc_checksum(data):
crc = 0xFFFF
for i in range(len(data)):
crc ^= data[i]
for j in range(8):
if crc & 0x0001:
crc >>= 1
crc ^= 0xA001
else:
crc >>= 1
return binascii.hexlify(crc.to_bytes(2, byteorder='little')).decode('utf-8')
data = b'Hello, world!'
checksum = crc_checksum(data)
print(checksum)
```
上述代码计算了字符串"Hello, world!"的CRC校验码。输出的校验码为"b'8696'"(十六进制)。可以根据需要修改输入数据。
相关问题
crc校验码计算答题
### CRC校验码的计算方法
CRC16计算的核心思想是将数据视为一个多项式,并与一个预定的生成多项式进行除法运算,得到的余数即为CRC校验值[^1]。这个过程可以通过移位和异或运算来实现。
#### 计算步骤说明
为了更好地理解这一概念,下面通过Python代码展示如何具体实施CRC-16-CCITT算法:
```python
def crc16_ccitt(data, initial=0xFFFF):
crc = initial
polynomial = 0x1021 # 使用CRC-16-CCITT标准多项式
for byte in data:
crc ^= byte << 8
for _ in range(8):
if crc & 0x8000:
crc = (crc << 1) ^ polynomial
else:
crc <<= 1
crc &= 0xFFFF
return crc
```
此函数接收待处理的数据以及可选参数`initial`作为初始值,默认采用全'1'(即十六进制表示下的`0xFFFF`)。对于每一个输入字节,先将其左移八位并与当前循环冗余检验值做按位异或操作;接着执行八个轮次的操作,在每一轮内判断最高有效位是否被置位——如果确实如此,则需进一步应用给定的生成多项式完成模二加法(亦称为异或),最后确保结果保持在两个字节范围内。
假设现在有一组简单的ASCII字符组成的字符串"1234"需要求其对应的CRC-16-CCITT编码,可以调用上述定义的方法如下所示:
```python
data_bytes = b"1234"
result_crc = crc16_ccitt(data_bytes)
print(f"CRC-16-CCITT of '1234': {hex(result_crc)}")
```
这段程序会输出该特定消息串所对应于选定协议版本(CRC-16-CCITT)下产生的唯一识别标签形式的结果。
crc校验码计算小工具
好的,我可以为您提供一个简单的 CRC 校验码计算器。您可以使用以下 Python 代码实现:
```python
def crc_remainder(input_bitstring, polynomial_bitstring, initial_filler):
polynomial_bitstring = polynomial_bitstring.lstrip('0')
len_input = len(input_bitstring)
initial_padding = initial_filler * (len(polynomial_bitstring) - 1)
input_padded_array = list(input_bitstring + initial_padding)
while '1' in input_padded_array[:len_input]:
cur_shift = input_padded_array.index('1')
for i in range(len(polynomial_bitstring)):
input_padded_array[cur_shift + i] = str(int(polynomial_bitstring[i] != input_padded_array[cur_shift + i]))
return ''.join(input_padded_array)[len_input:]
def crc_check(input_bitstring, polynomial_bitstring, check_value):
check_bitstring = crc_remainder(input_bitstring, polynomial_bitstring, '0')
return (check_bitstring == check_value)
```
其中,`input_bitstring` 是要进行 CRC 校验的二进制字符串,`polynomial_bitstring` 是 CRC 多项式的二进制字符串,`initial_filler` 是填充字节。您可以根据需要调整这些参数。例如,如果您想要计算 8 位 CRC 校验码,可以使用以下代码:
```python
input_bitstring = '110101'
polynomial_bitstring = '1001'
initial_filler = '0'
crc_remainder(input_bitstring, polynomial_bitstring, initial_filler)
```
这将输出 `110` 作为校验码。如果您想要验证给定的校验码是否正确,可以使用以下代码:
```python
input_bitstring = '110101'
polynomial_bitstring = '1001'
check_value = '110'
crc_check(input_bitstring, polynomial_bitstring, check_value)
```
这将输出 `True`(代表校验码正确)。
阅读全文