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

时间:2017-04-11 06:43:40

标签: c return xor crc

我正在编写一个代码来使用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

我很欣赏正确方向的推动!

1 个答案:

答案 0 :(得分:3)

代码if(dividend && 0x32)毫无意义,将评估为1。这就是为什么没有任何作用的原因。

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

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