本文介绍了CRC16-ITU证明的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

伙计们。我正在使用CRC16-ITU检查来比较一些数据,但是当我将CRC16-ITU和数据包数据与来自设备的CRC16进行比较时,它不匹配。

guys. I am using CRC16-ITU check in order to compare some data, but it is not match when I compared CRC16-ITU and packet data with CRC16 from device.

CRC16-ITU表。

Here is CRC16-ITU table.

=============================== ======================================

========================================================================

然后我使用此代码来制作crc

And I used this code in order to make crc

u16 fcs16(u16 fcs, unsigned char *cp, int len)
{
    while(len--)
        fcs = (fcs >> 8) ^ crctab16[(fcs ^ *cp++) & 0xff];

    return(fcs);
}

以下是来自设备的数据包数据的示例

Here is example of packet data from device

7e 01 11 97 17 7e

7e 01 11 97 17 7e

97 17表示CRC16为小字节序方法。

97 17 means CRC16 as little endian method.

当我在项目中使用CRC16-ITU代码时,我得到了这个 4edf

when I use CRC16-ITU code in my project, I got this "4edf"

I ,不明白为什么这些数据之间不匹配。

I, totally, don't understand why there is mismatching between those data.

如果您有任何想法,请为我​​发表评论

If you have any idea, please comment for me

thx

推荐答案

您的CRC 0x4edf对应于CRC-16 / X-25算法(使用)
在字节序列 7e 01上11 。如果您在 01 11 上计算CRC,则
应该获得0x1797作为16位值(或 97 17 为两个字节)。

Your CRC 0x4edf corresponds to the CRC-16/X-25 algorithm (using the notation from http://reveng.sourceforge.net/crc-catalogue/)over the byte sequence 7e 01 11. If you compute the CRC over 01 11 youshould get 0x1797 as a 16-bit value (or 97 17 as two bytes).

这篇关于CRC16-ITU证明的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-26 05:35