Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
计算poly CRC-32K/6.2的CRC查找表_C_Crc - Fatal编程技术网

计算poly CRC-32K/6.2的CRC查找表

计算poly CRC-32K/6.2的CRC查找表,c,crc,C,Crc,我需要来自的poly(0x992c1a4c;0x132583499)(0x992c1a4c;0x132583499)的属性 我已经读了一遍又一遍,但是我不能做最后的连接。我也不知道如何检查生成的表的正确性 我是否需要考虑系统的持久性?我可以使用反射算法吗?我应该选择哪些初始值和XorOut值?如何检查结果?琐事-多项式0x132583499是3个素数因子的乘积(无卡利乘法): 计算crc查找表 这取决于crc是左移还是右移。假设该表用于一次处理一个字节,则使用256×32位的表。对于左移crc,

我需要来自的poly
(0x992c1a4c;0x132583499)(0x992c1a4c;0x132583499)的属性

我已经读了一遍又一遍,但是我不能做最后的连接。我也不知道如何检查生成的表的正确性


我是否需要考虑系统的持久性?我可以使用反射算法吗?我应该选择哪些初始值和XorOut值?如何检查结果?

琐事-多项式0x132583499是3个素数因子的乘积(无卡利乘法):

计算crc查找表

这取决于crc是左移还是右移。假设该表用于一次处理一个字节,则使用256×32位的表。对于左移crc,最重要的位被屏蔽:0x132583499->0x32583499:

void gentbl(void)
{
uint32_t crc;
uint32_t b;
uint32_t c;
uint32_t i;
    for(c = 0; c < 0x100; c++){
        crc = c<<24;
        for(i = 0; i < 8; i++){
            b = crc>>31;
            crc <<= 1;
            crc ^= (0 - b) & 0x32583499;
        }
        crctbl[c] = crc;
    }
}

该网站包括当消息长度对于给定的汉明距离太长时,crc poly为0x132583499的故障示例。对于HD=3或4,长度为(65538+1)65539位的编码消息,除位[0]和位[65538]=1之外的所有零位,这将通过crc检查,即使有2位出错。对于HD=5或6,编码消息长度32771,除位[{0,1,32769,32770}]=1之外的所有零位都通过crc检查,但有4位错误。对于HD=7或8,编码消息长度167,除位[{0,43,44,122,123,166}]=1之外的所有零位都通过crc检查,但有6位错误。对于HD=9或10,编码消息长度59,除位[{0,5,21,25,33,37,53,58}]=1之外的所有零位都通过了crc检查,但有8位错误。

crc动物园页面上的“黄金”链接不提供您所要求的吗?黄金数据提供了汉明权重。我不太明白如何使用它来轻松检查正确性。回答得很好。我所有的观点都涵盖了,还有一些额外的东西。非常有用。谢谢:)
void gentbl(void)
{
uint32_t crc;
uint32_t b;
uint32_t c;
uint32_t i;
    for(c = 0; c < 0x100; c++){
        crc = c<<24;
        for(i = 0; i < 8; i++){
            b = crc>>31;
            crc <<= 1;
            crc ^= (0 - b) & 0x32583499;
        }
        crctbl[c] = crc;
    }
}
void gentbl(void)
{
uint32_t crc;
uint32_t b;
uint32_t c;
uint32_t i;
    for(c = 0; c < 0x100; c++){
        crc = c;
        for(i = 0; i < 8; i++){
            b = crc&1;
            crc >>= 1;
            crc ^= (0 - b) & 0x992c1a4c;
        }
        crctbl[c] = crc;
    }
}
HD = {    3,    4,    5,    6,  7,  8, 9,10,11,12,13,14
     {65506,65506,32738,32738,134,134,26,26,16,16, 3, 3}
     {65538,65538,32770,32770,166,166,58,58,48,48,35,35} +32 for crc