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