CRC32的python版本

研究CRC的原理,看的有点懵,尝试用python实现,以下为试验与zlib的CRC32结果相同的代码段:

def crc32_zlib(data, poly=0xEDB88320, init=0xFFFFFFFF):    #zlib.crc32 使用的是 反转多项式(reversed polynomial),即 0xEDB88320
    """
    计算 CRC-32 校验值
    :param data: 输入数据(字节列表)
    :param poly: 多项式(默认是 CRC-32反转多项式 0xEDB88320)
    :param init: 初始值(默认是 0xFFFFFFFF)
    :return: CRC 校验值(32 位)
    """
    crc = init
    for byte in data:
        crc ^= byte                        # 反转多项式数据不左移
        for _ in range(8):
            if crc & 1:
                crc = (crc >> 1) ^ poly      # 按顺序处理,不需要左移
            else:
                crc >>= 1
            
    return crc ^ 0xFFFFFFFF

测试代码为:

# 输入数据
data = [0xF7, 0x9E, 0xEF, 0x7D, 0xEF, 0x7D, 0xEF, 0x5D, 0xEF, 0x5D, 0xE7, 0x5D, 0xE7, 0x3D, 0xE7, 0x3C]

# 计算 CRC 校验值

crc32_zlib_value = crc32_zlib(bytes(data))
print(f"自定义CRC-32 校验值: 0x{crc32_zlib_value:08X}")

CRC_num = zlib.crc32(bytes(data))
print(f"ZLIB CRC-32 校验值: 0x{CRC_num:08X}")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值