【发布时间】: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