CRC C程序怎么理解啊?那位大侠帮助下,万分感谢!!!

2025-01-06 02:43:33
推荐回答(2个)
回答1:

执行结果 crc = 0xdbc0;
程序 1-1,1-2,1-3 可以理解成移位前 crc 的 Bit15 与数据对应的 Bit(*ptr&i)做 XOR运算,根据此结果来决定是否执行 crc^=0x1021。只要明白两次异或运算与原值相同,就不难理解这个程序。

很多资料上都写了查表法来计算,当时是怎么也没想通。其实蛮简单的。假设通过移位处理了 8 个 bit 的数据,相当于把之前的 CRC 码的高字节(8bit)全部移出,与一个 byte 的数据做XOR 运算,根据运算结果来选择一个值(称为余式),与原来的 CRC 码再做一次 XOR 运算,就可以得到新的 CRC 码。

不难看出,余式有 256 种可能的值,实际上就是 0~255 以 X16+X12+X5+1 为权得到的 CRC码,可以通过函数 crc16l来计算。以1 为例。

code test[]={0x01};
crc = 0;
ptr = test;
crc = crc16l(ptr,1);

执行结果 crc = 1021,这就是1 对应的余式。

进一步修改函数,我这里就懒得写了,可得到 X16+X12+X5+1 的余式表。

回答2:

crc=0 是对crc这个变量初始化。

这个程序是一个很简单的crc校验函数你直接拿去用就是了。