CRC16-CCITT(x.25)校验和计算问题

时间:2015-11-08 05:04:54

标签: c++ hex checksum crc crc16

我已经阅读了一个有用的网站,其中包含其他帖子中包含的CRC计算器,效果很好,但不幸的是,C语言提供的代码不会复制这些功能: http://www.zorc.breitbandkatze.de/crc.html

CRC16-CCITT(x.25)需要以下配置,这是我正在使用的传感器和支持电子组件的格式:

  • CRC顺序:16
  • CRC多项式:0x11021 [输入为1021]
  • 初始值:0xffff [输入为ffff]
  • 直接/间接:直接
  • 最终XOR值:0xffff [输入为ffff]
  • 反向数据字节:正确
  • 在最终XOR之前的反向CRC结果:真

但是,有时会使用C代码计算错误的CRC ,具体而言,使用在线计算器可以正确显示。

您可以在以下链接中找到C代码,但请务必更改配置选项以匹配上述内容: http://www.zorc.breitbandkatze.de/crctester.c

以下是放置在C代码中的示例数据包:

const char string[] = { "\x82\x2f\x0a\x40\x00\x00\x7a\x44" };

返回错误的CRC“0x1e4e”。

并在在线计算器中: “%82%2F%0A%40%00%00%图7a%44”

返回正确的CRC“0xd831”。

此外,您需要一个既可以使用在线计算器又可以使用C代码的数据包。

在C代码中:

const char string[] = { "\x81\x2f\x0b\x4f\xd8\xab\x0d\x42\xed" };

在在线计算器中: “%81%2F%0B%的4f%D8%AB%0D%42%ED”

有谁知道为什么会这样,以及如何纠正C代码以解决这个问题?

非常感谢您考虑提供帮助!

0 个答案:

没有答案