Python实现循环冗余码

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

循环冗余码的逻辑(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

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值