我正在编写一个代码来使用32位无符号整数计算CRC16。当试图从执行CRC操作的XOR函数中输出返回值时,它始终打印0.我尝试了各种调试方法,例如打印语句,但是,我似乎无法弄清楚!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
我很欣赏在正确的方向轻推!
你知道逻辑AND与按位AND之间的区别吗? – user694733
@ user694733我不这样认为他们是同一件事。我会详细阅读。 – starlight
您不会对“POLYNOMIAL”指向的任何数据进行校验和,而是指针本身。这看起来不太有用。你也不会计算'text'字符串的任何校验和(可能不是零终止的)。你真的定义了这个宏吗?结合您显示的代码,它也没有多大意义。 –