问题标签 [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 回答
2722 浏览

for-loop - vhdl "解析错误,意外 FOR"

我尝试在 ise 14.4 中的 vhdl 上编写程序以进行 crc16 计算,但不明白为什么会出现“解析错误,意外 FOR”。试图将其放入进程中,但它也不起作用。

0 投票
3 回答
20534 浏览

c# - 计算 CRC16 (Modbus) 值的函数

使用 C#.net,WPF 应用程序。我要连接到设备(MODBUS 协议),我必须计算 CRC(CRC16)。我使用的函数计算正常的 crc16 并且值是正确的,但我想要 CRC16(modbus) 的值之一。

帮我整理一下。

0 投票
2 回答
1277 浏览

security - CRC16 冲突(不同大小块的 2 个 CRC 值)

问题

我有一个文本文件,其中每行包含一个字符串(换行符 \r\n)。该文件使用 CRC16 以两种不同的方式进行保护。

  1. 4096 字节块的 CRC16
  2. 32768字节块的CRC16

现在我必须修改这些 4096 字节块中的任何一个,所以它(块)

  • 包含特定字符串
  • 不改变文本文件的大小
  • 具有与原始块相同的 CRC 值(对于包含此 4k 块的 32k 块相同)

除了这些限制之外,只要文件本身不破坏其格式,我就可以对块进行填充所需的任何修改。我认为最好使用任何完全填充的 4k 块,而不是最后一个块,因为它可能真的很短。

问题

我应该如何开始解决这个问题?我想的第一件事是某种蛮力,但不是需要很长时间才能找到导致两个 CRC 值保持不变的变化吗?可能有一种数学方法可以解决这个问题吗?

它应该在几秒钟或最多时间内完成。一会儿。

0 投票
2 回答
18769 浏览

c# - CRC16 ISO 13239 实施

我正在尝试在 C# 中实现 Crc16。我已经尝试了许多不同的实现,但它们中的大多数给了我不同的值。这是我已经使用的一些代码。

这是我使用的另一个实现,但都给出了不同的值

我使用的值是一个八位组字符串 “[jp3]TEST [fl]Flashing[/fl]”,它的期望值是95F9(十六进制)。这是一个关于 NTCIP 协议指南的例子

谢谢

0 投票
1 回答
700 浏览

c# - C# 中 DECT 的 CRC 16

在 C 中提出并回答了一个类似的问题,但我在 C# 中实现同样的目标有点困难。

生成多项式:x^16 + x^10 + x^8 + x^7 + x^3 + 1相当于10000010110001001二进制。


我有 48 位数据,现在我需要生成 16 位 CRC,代码如下:

但是上面的代码给了我错误的输出,如果有更好的方法,请建议我。

Edit:

数据(a0 到 a47):100011100011000001000001000100001000000000001000

多项式:10000010110001001

获得的输出:0011 0100 1111 0111

预期输出:1100 1101 0100 1111


谢谢你的时间。!

0 投票
1 回答
786 浏览

java - Java 执行 crc 检查(将字节数组除以字节数组)

我在字节数组上生成了一个CRC整数,并将其也转换为 4 字节数组。我将这个类用于使用生成多项式 = 的 CRC16,0x1021;这意味着1 + x + x^5 + x^12 + x^16 我将我的字节数组和CRCoverUDP发送到服务器。在服务器端,我喜欢检查字节数组是否正确传输。据我了解,我可以将与 crc-array 连接的数据数组除以生成多项式。我理解对了吗?以及如何data+crc在Java中通过生成多项式进行除法?

我已经看到了仅在数据上再次生成 crc 代码并比较结果 crc 代码是否相同的解决方案,但这可能是 crc-codes 的用途。

0 投票
4 回答
65792 浏览

c++ - 计算 Modbus RTU CRC 16

我正在实现一个软件,我通过串行在 Modbus RTU 协议中读取和写入数据。为此,我需要计算字节串末尾的两个 CRC 字节,但我无法做到这一点。

在网上搜索,我发现了两个似乎可以正确计算 CRC 的函数:

问题是我应该得到两个十六进制字节作为 CRC 数字,而这个函数返回一个整数值。例如,对于“01”(1 个字节),我应该得到一个“7E80”,而我得到“21695”,我无法从这个到那个十六进制数据进行某种转换。

因此,我的问题是:如何从整数结果转到所需的双十六进制结果?我尝试了几个选项,但没有成功。

注意:我正在使用 Qt,所以如果有人能找到实现 QByteArray 或其他 Qt 友好代码的解决方案,我会很高兴。无论哪种方式,不使用 Qt、C 或 C++ 的解决方案都是无用的:P

0 投票
5 回答
5874 浏览

php - CRC-CCITT 到 CRC16 Modbus 实施

我在使用 PHP 生成 modbus CRC16 代码时遇到了很多麻烦。我在互联网上找到了很多不同的代码,但我已经尝试过了,但由于某种原因,我没有得到正确的结果。我找到了用于生成 CRC16-CCITT 的 PHP 代码。我已将查找表转换为 modbus CRC 对应表,但结果仍然不正确。代码如下。为了将 CRC16-CCITT 代码转换为 CRC16-MODBUS 代码,我还需要做些什么。

0 投票
1 回答
4060 浏览

matlab - Matlab 中的 16 位 CRC-CCITT

给定calcCRC()如下所示的 C 函数,什么是等效的 Matlab 函数?

C 语言中的 16 位 CRC-CCITT:

下面是我想出的 Matlab 代码,它似乎是等价的,但不输出相同的结果:

(不正确)Matlab 中的 16 位 CRC-CCITT:

这是一个示例字节数组,表示为一个整数数组:

预期的输出是两个字节base10(44 219),即base2(00101100 11011011)or base10(11483)

我的 Matlab 函数给出base10(85)的是base2(00000000 01010101).

关于导致输出不符合预期的任何想法?

0 投票
4 回答
2917 浏览

java - 在java中计算16位CRC并将其附加到字节数组的末尾

我有以下缓冲区

我需要计算这 6 个字节的 16 位 CRC 并将其附加到末尾

我已经使用 C++ 完成了它,并尝试在 java 中更改该代码,如下所示,但它不起作用。

在行中

看到的错误是“无法从 int 转换为 boolean”

并在行中

看到的错误是“无法从 int 转换为 char”

实际上 c 中的代码使用了 unsigned char ,我将它们转换为 char 。我在这个 java 实现中将 unsinged short 转换为 int 。

请建议我如何改进这种 crc 计算方法。或者有没有其他方法从十六进制字节计算 crc 。我已经搜索了其他方法,但它不适用于 pingBuff [] 中的十六进制字节。