我正在编写一个代码来使用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
我很欣赏正确方向的推动!
答案 0 :(得分:3)
代码if(dividend && 0x32)
毫无意义,将评估为1
。这就是为什么没有任何作用的原因。
也许你的意思是if(dividend & 32)
或类似的?如按位AND而不是逻辑AND。十六进制0x20
十进制32
(这可能有意义......可能不是?)而不是十六进制0x32
十进制50
(这根本没有任何意义) 。
总的来说,这个CRC算法看起来非常可疑。例如,您只能迭代超过31位。