接收到CRC32编码的数据如何验证数据的正确性?

用python的tcp接收CRC32校验的数据,该怎么验证接收到的数据是否正确?普通的CRC验证我知道,比如数据110011,多项式10011,计算的出CRC编码1010,传输110011 1010,我收到后模二10011就行。但用CRC32校验的话,又是反转,又是初始值,得出CRC编码是Ox6DD28E9B,这个值怎么使用?还是直接加到原始数据中吗?我用发送数据+CRC编码除以多项式验证结果不正确。CRC32里初始值到底怎么用?该如何验证经CRC32编码后的数据正确性?最好用python给个函数

  0x6DD28E9B  ? 16进制


class CRC:
    def __init__(self, info, crc_n=32):
        self.info = info
        if crc_n == 8:
            loc = [8, 2, 1, 0]
        elif crc_n == 32:
            loc = [32, 26, 23, 22, 16, 12, 11, 10, 8, 7, 5, 2, 1, 0] # 国际标准CRC-32
        elif crc_n == 16: 
            loc = [16, 15, 2, 0] # 国际标准CRC-16
        elif crc_n == 4:
            loc = [4, 3, 0]
            
        # 列表解析转换为多项式比特序列
        p = [0 for i in range(crc_n + 1)]
        for i in loc:
            p[i] = 1
        p = p[::-1] #逆序输出
        info = self.info.copy()
        times = len(info)
        n = crc_n + 1
        # 左移补零即乘积
        for i in range(crc_n):
            info.append(0)
        # 乘积除以多项式比特序列
        q = [] # 商
        for i in range(times):
            if info[i] == 1: #若乘积位为1,则商1,后逐位异或 
                q.append(1)
                for j in range(n):# n即p的位数
                    info[j + i] = info[j + i] ^ p[j] #按位异或
            else: #若乘积位是0,则商0,看下一位
                q.append(0)
        # 余数即为CRC编码
        check_code = info[-crc_n::]
        # 生成编码
        code = self.info.copy()
        for i in check_code:
            code.append(i)
        self.crc_n = crc_n
        self.p = p
        self.q = q
        self.check_code = check_code
        self.code = code
    def print_format(self):
        print('{:10}\t{}'.format('发送数据比特序列:', self.info))
        print('{:10}\t{}'.format('生成多项式比特序列:', self.p))
        print('{:15}\t{}'.format('商:', self.q))
        print('{:10}\t{}'.format('余数(即CRC校验码):', self.check_code))

import numpy as np
m1=bin(0x6DD28E9B)
m = [int(i) for i in list(m1)[2:]]
crc = CRC(m, 32)
crc.print_format()

 

是十六进制,上面那个代码我有,这个生成CRC编码的,还是不标准的CRC32编码,没有初始值,和输入反转这些。再说我不是要生成CRC编码,我只想要验证经CRC编码的数据是否正确!

这样相当于又做了一遍CRC编码,但我想要正常校验的方法,还有那个CRC32初始值FFFFFF是怎么使用呢