循环冗余校验CRC

在这里插入图片描述

### 计算循环冗余校验 (CRC) 编码 #### 基本原理 CRC 算法的核心在于将待发送的数据视为一个非常大的二进制整数,并通过特定的生成多项式对该数值执行模2除法操作。所得的余数即为 CRC 校验码,该值会被追加至原始数据之后一同传输给接收端,在那里会再次进行相同的计算来验证数据完整性。 #### 数据准备阶段 假设有一个8比特的信息序列`1001 1100`以及选定的标准16位生成多项式之一 `G(x)=x^16 + x^15 + x^2 + 1` 或者表示成二进制形式就是`1100...00101`(其中省略号代表中间全部填充零)[^1]。 为了使被除数能够容纳下可能产生的最大余数——也就是等于或小于所选生成多项式的最高次幂减去一次方的结果长度,因此需要先在消息串后补上相应数量(此处为16)个'0'[^3]。 于是初始输入变为:`1001 1100 0000 0000` #### 执行模2除法过程 接下来按照常规长除法规则来进行处理, 不过这里所有的加法都基于异或(XOR)运算而不是普通的十进制相加: ```python def crc_remainder(input_bitstring, polynomial_bitstring, initial_filler): 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:] crc_result = crc_remainder("10011100", "11000000000000101", '0') print(f"CRC result is {crc_result}") ``` 上述Python函数实现了模拟手工完成整个除法流程的功能;最终输出的是经过转换后的CRC检验值字符串[crc_result]. #### 结果解释 最后获得的十六位CRC校验码将会附加上述信息字节流末端形成完整的传输单元供后续检错用途。值得注意的是实际应用中往往存在多种不同规格参数组合而成的具体实现方案,比如常见的CRC-16、CRC-CCITT等变种版本均采用了各自独特的生成多項式定义。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值