计算CRC16-ccitt

时间:2018-06-06 13:38:45

标签: c calculator crc

我正在观察我要解决的一个问题。

我必须计算十六进制条目的CRC(来自数组)并将其与预期进行比较。我没有多项式。

从校验和中提取的数组看起来像(示例):

unsigned short crcSrc[0x7FFE] = {0xB6FE, 0x8062, 0x2714, 0xB8FE, 0x8066, 0xA940, 0xA743, 0xBCF7, 0x0B87, 0x7E18, 0x070B...... };

条目从文件中提取,看起来像(只是开始):

S0 5A00 0043 3A5C 4441 5445 4E5C 5072 6F6A 656B 7465 5C48 5648 5F48 3130 305F 3830 305C 4170 706C 6963 6174 696F 6E5C 506F 7273 6368 655C 4A31 5C53 6F66 7477 6172 655C 4275 696C 645C 4856 485F 506F 7273 6368 655F 4A31 2E70 726D B9S2 0600 0000 D7F2 30S2 24FE 8000 B6FE 8062 2714 B8FE 8066 A940 A743 BCF7 0B87 7E18 070B 8675 05B9 FE80 6927 10A6 B3S2 24FE 8020 F727 0CA8F71CF7E70B867D2074051B030011FF95A11B03001000BDFA001ED2207A

我需要做什么?我得到了一个正确的CRC结果,即0xd7f2,我必须写一个计算器才能得到它。我已经在互联网上找到了一些解决方案,但我仍然没有解决这个问题所需的Polynom。我怎么才能得到它 ?它隐藏在该文件的某个位置吗?

非常感谢

编辑:我在这里发布我的代码我是如何计算CRC的

unsigned short crc16(char *data_p, unsigned short length)
 {
  unsigned char i;
  unsigned int data;
  unsigned int crc = 0xffff;

  if (length == 0)
        return (~crc);

  do
  {
        for (i=0, data=(unsigned int)0xff & *data_p++;
             i < 8;
             i++, data >>= 1)
        {
              if ((crc & 0x0001) ^ (data & 0x0001))
                    crc = (crc >> 1) ^ POLY;
              else  crc >>= 1;
        }
  } while (--length);

  crc = ~crc;
  data = crc;
  crc = (crc << 8) | (data >> 8 & 0xff);
  return (crc);
}

编辑2:添加所有来源Files to download

0 个答案:

没有答案