CRC 校验 XOR Function return value is always is 0

CRC check XOR Function return value is always 0

我正在编写代码来使用 32 位无符号整数计算 CRC16。当尝试从执行 CRC 操作的 XOR 函数打印出 return 值时,它总是打印 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 位。