gpt4 book ai didi

CRC 校验 XOR 函数返回值始终为 0

转载 作者:太空宇宙 更新时间:2023-11-04 06:56:49 28 4
gpt4 key购买 nike

我正在编写代码来使用 32 位无符号整数计算 CRC16。当尝试打印执行 CRC 操作的 XOR 函数的返回值时,它总是打印 0。我尝试了各种调试方法,例如打印语句,但是,我似乎无法弄清楚!

这是我的 XOR 函数:

 uint32_t XOR(uint32_t divisor, uint32_t dividend)

{
uint32_t divRemainder = dividend;
uint32_t currentBit;

for(currentBit = 32; currentBit > 0; --currentBit)
{
if(dividend && 0x32)
{
divRemainder = divRemainder ^ divisor;
}
divRemainder = divRemainder << 1;
}
return (divRemainder >> 8);
}

调用上述方法的函数:

  void crcCalculation(char *text, FILE *input, char *POLYNOMIAL)
{
int i = strlen(text);
uint32_t dividend = atoi(POLYNOMIAL);
uint32_t result;


readInput(text, input);
printText(text);


printf("CRC 16 calculation progress:\n");


if(i < 504)
{
for(; i!=504; i++)
{
text[i] = '.';
}
}

result = XOR((uintptr_t)POLYNOMIAL, dividend);

printf(" - %d", result);

}

常数多项式(我希望我为 CRC 16 计算正确:

#define POLYNOMIAL A053

我会很感激在正确的方向轻推!

最佳答案

代码 if(dividend && 0x32) 完全没有意义,将评估为 1。这就是为什么什么都不起作用的原因。

也许您的意思是 if(dividend & 32) 或类似的?就像按位 AND 而不是逻辑 AND 一样。和十六进制 0x20 十进制 32 (这可能有意义......可能不是?)而不是十六进制 0x32 十进制 50(这根本没有任何意义)。

总的来说,这个 CRC 算法看起来很可疑。例如,您只能迭代 31 位。

关于CRC 校验 XOR 函数返回值始终为 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43338548/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com