问题标签 [crc16]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
7220 浏览

c# - SerialPort Write() 发送的字节多于发送缓冲区

我有一个非常奇怪的问题,我正在传输一个 105 字节 [] 缓冲区,并在另一端不断接收116 字节。

原始数据的最后 2 个字节是CRC16

我用于传输的代码是,它永远循环。

我在另一边不断得到的是以下 116 个字节(消息以原始CRC字节结尾是多么奇怪??)

任何帮助将不胜感激,以解决此问题,

谢谢

0 投票
2 回答
3776 浏览

objective-c - NSData 到 CRC-16?

我正在尝试从 NSData 计算 CRC-16。它不起作用,我期待来自 123456789 的“BB3D”,但我没有得到任何类似的东西。

这是我拥有的代码:

我得到 54849 和 d641,这不是我所期望的。

0 投票
1 回答
40075 浏览

c# - 如何用多项式 x16 + x12 + x5 + 1 计算 CRC 16

我正在尝试与某些系统交互,并且在他们的规范中,他们需要计算 CRC 16 以进行串行通信。这是文档的摘录

“使用标准多项式 X16 +X12 +X5 +1 的消息的 16 位 CCITT CRC。种子值始终为 0(零)”

首先,我只找到了 2-3 个 C# 代码示例,它们似乎都没有给我正确的值。我试过这个http://www.sanity-free.com/133/crc_16_ccitt_in_csharp.html,但我不确定为初始值设置什么。我尝试了零,但仍然无法正常工作。

我正在测试它的数据是:

我得到的CRC值是

但是他们的系统说应该是

我的理解是多项式 x16 + x12 + x5 + 1 = 0x11021,但是即使我在代码中使用这个,它仍然给我错误的答案。我究竟做错了什么?

0 投票
2 回答
9566 浏览

c# - CRC-CCITT (0xFFFF) 缺少什么?

基于在线 CRC 计算,当我输入十六进制字符串数据 =

503002080000024400003886030400000000010100

我得到结果CRC-CCITT (0xFFFF) =

0x354E(预期结果)

.

我使用下面的代码,但CalcCRC16()的结果是0xACEE。下面缺少什么脚本?

0 投票
3 回答
14476 浏览

c# - CRC-16 和 CRC-32 检查

我需要帮助来验证 CRC-16 值(也需要 CRC-32 值的帮助)。我试图坐下来了解 CRC 是如何工作的,但我画的是一个空白。

我的第一个问题是尝试使用在线计算器将消息“ BD001325E032091B94C412AC”计算为CRC16 = 12AC 时。文档指出最后两个八位字节是 CRC16 值,所以我BD001325E032091B94C4在网站http://www.lammertbies.nl/comm/info/crc-calculation.html中输入“”并接收 5A90 作为结果而不是 12AC .

有谁知道为什么这些值不同以及我在哪里可以找到如何计算 CRC16 和 CRC32 值的代码(我计划稍后学习如何做到这一点,但现在时间不允许)?

更多消息如下:

- 编辑 -

我已经包含了更多信息。我引用的文档是 TIA-102.BAAA-A(来自 TIA 标准)。以下是文档中的说明(尽量避免侵犯版权):

数据包中的最后一个块包括几个八位字节的用户信息和/或填充八位字节,然后是一个 4 八位字节的 CRC 奇偶校验。这称为数据包 CRC。

数据包 CRC 是一个 4 字节的循环冗余校验码,对包含在中间块中的所有数据八位字节和最后一个块的用户信息八位字节进行编码。具体计算如下。

令 k 为要计算分组 CRC 的用户信息和填充比特的总数。将 k 个消息比特视为 k-1 次多项式 M(x) 的系数,将第零个消息八位字节的 MSB 与 x^k-1 相关联,将最后一个消息八位字节的 LSB 与 x^0 相关联。定义生成多项式 GM(x) 和反演多项式 IM(x)。

GM(x) = x^32 + x^26 + x^23 + x^22 + x^16 + x^12 + x^11 + x^10 + x^8 + x^7 + x^5 + x ^4 + x^2 + x + 1

IM(x) = x^31 + x^30 + x^29 + ... + x^2 + x +1

然后根据以下公式计算数据包 CRC 多项式 FM(x)。

FM(x) = ( x^32 M(x) mod GM(x) ) + IM(x) 模 2,即在 GF(2) 中

FM(x) 的系数被放置在 CRC 字段中,CRC 的第 0 个八位字节的 MSB 对应于 x^31,CRC 的第三个八位字节的 LSB 对应于 x^0。

在上面的引用中,我已经^展示了权力,因为引用时格式并没有保持不变。我不确定会发生什么,但这有帮助吗?

0 投票
1 回答
619 浏览

serial-communication - CRC16 和数据通信

嗨,我一直在尝试为要为其编写软件接口的设备计算 CRC。为简单起见,我会说 X 是设备,Y 是硬件控制器。我正在寻找正确方向的推动力我确信我在正确的轨道上只是在几点上有点困惑。

当设备空闲时,它每 2 秒左右发送以下数据字符串,看起来它正在以十六进制计数:两者之间的 2 个字节| |是我假设的 CRC。(XX) 是可变字节。

使用revengwithreveng -w 16 -s和上述数据集我得到:

当我拦截来自控制器的 a 命令时,我得到:

其中 (22) 是修饰符|0B B8|是 CRC。22是怎么从E4衍生出来的?是另一个 CRC 吗?

当我多次发送相同的命令时,我截获了以下内容:

使用revengwithreveng -w 16 -s和上述数据集我得到:

多项式是相同的,但 init 和 check 不同,很抱歉,很长的帖子,但这里是我的问题的摘要:

1)说设备使用相同的多项式但不同的init并检查控制器是否常见?

2) 来自设备的常量计数字符串是否用于偏移用于计算校验和的变量字节?如果是这样,这种机制称为什么,可以使用哪些方法来得出计数和字节之间的关系?

3)我是在正确的轨道上还是在途中迷路了?

感谢您花时间阅读本文,非常感谢您朝着正确的方向前进。

0 投票
4 回答
62657 浏览

c++ - CRC-CCITT 实施

我正在使用以下函数来生成 CRC 和,与在线 CRC-CCITT 计算器相比,它似乎没有返回相同的校验和。

此函数专门使用 XMODEM CRC 生成与 0x8408 多项式,初始 fcs 为 0xFFFF。

难道我做错了什么?如果我发送 0xFF 或 0x00,我不会得到与http://depa.usst.edu.cn/chenjq/www2/SDesign/JavaScript/CRCcalculation.htm上相同的校验和

0 投票
1 回答
815 浏览

excel - VBA Excel 中的转换问题 - 为什么 HFFF 长时间给出 -1 以及如何解决它

我在 excel 中使用 VB 并为 CRC16 位计算创建一个宏。当我从 8000 以上的查找表中取值到 FFFF 时,它们给出的是负数。然后我知道低于此范围的数字将是正数,而此范围内的数字(8000-FFFF)将给出必须转换的负数结果。我遇到了一些这样的功能,但它们并没有解决我的目的

是否可以使用简单的函数进行转换,以便获得正确的结果。

HFFFF 给一个长变量-1,但我想要 65535。

我已经使用了这里给出的函数http://support.microsoft.com/kb/161304但是当我传递像 HFFFF 这样的十六进制值时它没有给我正确的结果。

0 投票
3 回答
8662 浏览

java - ISO/IEC13239 CRC16 Implementation

I need a CRC16 implementation for NFC Tags. As the standard tolds me this is ISO/IEC13239 and a sample C code is provided. I translated this code into Java but it gives me wrong results:

As the standard tells me a byte sequence of 1,2,3,4 should create a CRC Value of 0x3991 A C Version is here on Page 42: http://www.waazaa.org/download/fcd-15693-3.pdf

Also other CRC Implementations does not work: crc16 implementation java The first gives me 0x9e33, the second 0x0FA1 (my implementation by the way says 0xE1E5)

Does someone find an error in my sample or is there another CRC16 Implementation thats really works?

0 投票
1 回答
659 浏览

c - 使用截断多项式 800516 将 CRC16 从 C 转换为 Ruby

我对Ruby很陌生,请帮忙。

这是我需要转换成 Ruby 的 C 代码。

传递值 [1,2,3,4,5] 它给了我十六进制的 B059

这是我尝试过的 Ruby 代码:

请帮我将此代码转换为 Ruby。谢谢迪帕克