【问题标题】:C program to calculate CRC [closed]计算CRC的C程序[关闭]
【发布时间】:2013-10-01 04:07:34
【问题描述】:

大家晚安,我一直在根据逻辑编写此代码,即要获得 CRC,您需要执行 2 次 XOR 操作,第一个:结果 = 数据 ^ 生成器,然后它移动 >> 一点一点地结束16 位并一遍又一遍地进行 XOR,因此 crc 最终是 = 结果 ^ 生成器,直到它分析整个 32 位序列。生成器是我老师提供的多项式。

到目前为止,这是代码:

{

int dato;       // 16 bits
int polin;      // generador
double r1;      // resultado de la trama de 32 bits


dato = 0x0000000001000100;      
polin = 0x82086DB;     
r1 = dato ^ polin;     // XOR
polin >>= 1;

  while(r1 > 0){
  r1 = dato ^ polin;
  r1 = 0x1 >> dato; 
  }
 printf("%x %x",dato,polin);
 printf("\n\r CRC es: ", r1);
 getch();   
}

我的问题是当我尝试执行它时,它停留在“while”中并且没有提供任何结果,希望有人可以帮助我。

【问题讨论】:

  • 代码本身看起来非常错误 - 尝试对 double 进行位移,在循环中写入 r1 两次以丢弃先前的分配,等等。尝试从头开始。
  • @DanielKO:说句公道话,double 永远不会移位,但我同意你所有其他 cmets :)
  • @JonathanPotter 对不起,我的意思是写“位移双”。
  • 网上有很多这方面的代码,包括更高效的表格驱动版本。环顾四周。
  • 谢谢大家,我可以通过添加 dato = r1; 来解决我的问题在迭代结束时,现在它退出循环并删除 0 的 crc 值。现在我可以继续更正我的代码。

标签: c++ c crc redundancy cyclic


【解决方案1】:
while(r1 > 0){
   r1 = dato ^ polin;
   r1 = 0x1 >> dato; 
}

您的 while 循环永远不会退出,因为 r1 的值在第一次迭代后永远不会改变。第一行的结果从不使用,第二行每次都返回相同的结果,因为循环不会修改dato的值。

【讨论】:

  • 非常感谢,现在我可以继续更正我的代码了。现在它为每个值删除 0 的结果。
猜你喜欢
  • 2021-08-29
  • 1970-01-01
  • 2012-12-14
  • 1970-01-01
  • 1970-01-01
  • 2021-08-09
  • 1970-01-01
  • 2015-12-19
  • 1970-01-01
相关资源
最近更新 更多