循环冗余码的逻辑(https://blog.youkuaiyun.com/weixin_43342105/article/details/108717695)
实现方式:
1.确定需要编码的二进制数,和除式
2.把二进制数后加上除式阶数*0
3.把二进制数切片成和除式等长,然后进行异或,异或后赋值变量在根据和除式长度加上后边的二进制码,以此类推,直到最后结果把二进制数后边的0替换为代码中的remain_code
code_1 = '110111100'
code_2 ="1101"
code_3 = "0000001111"
#mx位二进制数,gx为初式
def cycle_code(mx,gx):
#确定除式阶数
len_gx = len(gx)
#二进制后加除式阶数的0
mx = mx + ((len_gx-1)*"0")
len_mx = len(mx)
# 异或后赋值的变量
remain_code = ""
index = 0
while True:
#获取长度,加上除式长度的二进制数
len_remain_code = len(remain_code)
if len_remain_code < len_gx:
if index < len_mx:
remain_code += mx[index]
index += 1
else:
break
elif len_remain_code == len_gx:
#异或
remain_code = bin(int(remain_code,base=2) ^ int(gx,base=2))[2:]
if remain_code != "0":
# 把异或后的进行处理
remain_code = remain_code[remain_code.find("1"):]
return mx[:-len(remain_code)] + remain_code
# print(mx[:-len(remain_code)] + remain_code)
def cycle_code_2(mx,gx):
len_gx = len(gx)
mx = mx + ((len_gx-1)*"0")
len_mx = len(mx)
remain_code = ""
index = 0
while True:
len_remain_code = len(remain_code)
if len_remain_code < len_gx:
if index < len_mx:
end_index = (index+(len_gx-len_remain_code))
remain_code += mx[index:end_index]
index = end_index
else:
break
elif len_remain_code == len_gx:
remain_code = bin(int(remain_code,base=2) ^ int(gx,base=2))[2:]
if remain_code == "0":
remain_code = ""
remain_code = remain_code[remain_code.find("1"):]
return mx[:-len(remain_code)] + remain_code if remain_code else mx

循环冗余校验CRC编码实现
本文介绍了一种循环冗余校验(CRC)编码的具体实现方法,通过使用二进制数和特定的除式来进行异或运算,确保数据传输的准确性。详细步骤包括确定编码的二进制数、添加补零位、执行异或操作并计算最终校验码。
1327

被折叠的 条评论
为什么被折叠?



