标签: crc

CRC-16与0xA001多项式

我想用0xA001多项式计算字节数组的CRC-16校验和.但我真的不知道如何在Java中使用它,以及如何使用给定的多项式.它是某种特殊值(0xA001)吗?你能指点我一个可以为我计算校验和的图书馆,或者给我一些有用的资源吗?

在此先感谢,M.

java checksum crc

7
推荐指数
1
解决办法
1万
查看次数

什么是汉明距离,我如何确定它的CRC方案?

在为计算机网络课程学习时,教授谈到了示例代码中2个有效代码字之间的汉明距离.我已经读过关于汉明距离的内容,从描述两个字符串之间的距离差异的角度来看它是有意义的.例如:

Code Word 1 = 10110 
Run Code Online (Sandbox Code Playgroud)

发送方发送代码字1,并且引入了错误,接收方接收10100.因此您看到第4位已损坏.这将导致汉明距离为1,因为:

Valid Code Word: 10110
Error Code Word: 10100
                 -----
XOR              00010
Run Code Online (Sandbox Code Playgroud)

2个字符串的XOR结果为1,因此汉明距离为1.我理解它到那一点.但是教授要求:

  • 标准CRC-16位协议的汉明距离是多少?
  • 标准CRC-32位协议的汉明距离是多少?

我有点困惑,想知道是否有人可以提供帮助.谢谢.

crc hamming-distance

7
推荐指数
1
解决办法
2万
查看次数

Java兼容的cksum功能

Java中是否有任何库/代码以与unix中的cksum命令一致的方式计算字节流的32位CRC?

java crc32 checksum crc

7
推荐指数
1
解决办法
3813
查看次数

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

我正在尝试与某些系统接口,并且在他们的规范中,他们需要计算用于串行通信的CRC 16.以下是文档摘录

"利用标准多项式的消息的16位CCITT CRC,X16 + X12 + X5 + 1.种子值始终为0(零)"

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

我正在测试的数据是:

0x00 0x09 0x10 0x01 0x01 0x7C 0xF4 0xB8 0x00, 
Run Code Online (Sandbox Code Playgroud)

我得到的CRC值是

0xF2 0x24, 
Run Code Online (Sandbox Code Playgroud)

但他们的系统说它应该是

0xC0 0x2F
Run Code Online (Sandbox Code Playgroud)

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

.net c# serial-port crc crc16

7
推荐指数
1
解决办法
3万
查看次数

_mm_crc32_u64定义不明确

世界上为什么_mm_crc32_u64(...)这样定义?

unsigned int64 _mm_crc32_u64( unsigned __int64 crc, unsigned __int64 v );
Run Code Online (Sandbox Code Playgroud)

"crc32"指令总是累加32位CRC,而不是 64位CRC(毕竟,CRC32不是CRC64).如果机器指令CRC32 恰好具有64位目标操作数,则忽略高32位,并在完成时填充0,因此没有使用EVER具有64位目标.我理解为什么英特尔允许在指令上使用64位目标操作数(为了均匀性),但是如果我想快速处理数据,我想要一个尽可能大的源操作数(即如果我有那么多数据,则为64位,尾部较小)并且始终是32位目标操作数.但内在函数不允许使用64位源和32位目标.注意其他内在函数:

unsigned int _mm_crc32_u8 ( unsigned int crc, unsigned char v ); 
Run Code Online (Sandbox Code Playgroud)

"crc"的类型不是8位类型,也不是返回类型,它们是32位.为什么没有

unsigned int _mm_crc32_u64 ( unsigned int crc, unsigned __int64 v );
Run Code Online (Sandbox Code Playgroud)

?英特尔指令支持这一点,是最有意义的内在因素.

有没有人有可移植代码(Visual Studio和GCC)来实现后者的内在?谢谢. 我的猜测是这样的:

#define CRC32(D32,S) __asm__("crc32 %0, %1" : "+xrm" (D32) : ">xrm" (S))
Run Code Online (Sandbox Code Playgroud)

对于GCC,和

#define CRC32(D32,S) __asm { crc32 D32, S }
Run Code Online (Sandbox Code Playgroud)

对于VisualStudio.不幸的是,我对约束如何工作几乎一无所知,并且对汇编级编程的语法和语义缺乏经验.

小编辑:记下我定义的宏:

#define GET_INT64(P) *(reinterpret_cast<const uint64* &>(P))++
#define GET_INT32(P) *(reinterpret_cast<const uint32* …
Run Code Online (Sandbox Code Playgroud)

c crc32 sse crc sse4

7
推荐指数
2
解决办法
5710
查看次数

Modbus通讯

我正在使用C#通过modbus rs485 rs2322相电表进行通信,其中包括电源电压.

我必须通过总线发送数据,以便我可以接收读数.
我连接了普通电线并短接了发送和接收.

收到数据并触发此事件:

private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
    SerialPort sp = (SerialPort)sender;
    byte[] buff = new byte[sp.BytesToRead];

    //Read the Serial Buffer
    sp.Read(buff, 0, buff.Length);
    string data= sp.ReadExisting();

    foreach (byte b in buff)
    {
        AddBuffer(b); //Add byte to buffer
    }
}
Run Code Online (Sandbox Code Playgroud)

然后将此缓冲区发送到另一个函数,即:

private void AddBuffer(byte b)
{
    buffer.Add(b);

    byte[] msg =  buffer.ToArray();

    //Make sure that the message integrity is correct
    if (this.CheckDataIntegrity(msg))
    {
        if (DataReceived != null)
        {
            ModbusEventArgs args = new ModbusEventArgs();
            GetValue(msg, …
Run Code Online (Sandbox Code Playgroud)

c# modbus crc

7
推荐指数
1
解决办法
2万
查看次数

Elixir中CRC16校验和的库

我需要在elixir中计算字符串的CRC 16.是否有用于此目的的现有库?

crc elixir crc16

7
推荐指数
1
解决办法
777
查看次数

Python CRC8 计算

我有一些字节要在 python 中计算 CRC8。

我没有这方面的经验,但我知道,根据我设备的技术规格,必须使用 0x07 多项式和 0x00 初始化进行此计算。

让我们来看一个用例。我收到了这个字节列表,我知道最后一个是 CRC:

0x00 0x11 0x23 0x32 0x1C 0xAC 0x23 0x3F 0x25 0x47 0x3D 0xB7 0xE2 0xC5 0x6D 0xB5 0xDF 0xFB 0x48 0xD2 0xB0 0x60 0xD0 0xF5 0xA7 0x10 0x96 0xE0 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xC5 0x8A
Run Code Online (Sandbox Code Playgroud)

现在,我如何计算我方的 CRC 以检查它是否对应于 0x8A?

我进行了一些研究并尝试了不同的 python 模块,如crcmodcrc8libscrc但我无法使它们工作:有时我MemoryError在控制台上遇到错误!

我也尝试过使用以下代码,但它似乎没有返回我认为正确的 CRC (0x8a):

import crc8
hash = crc8.crc8()
hash.update("0x001123321CAC233F25473DB7E2C56DB5DFFB48D2B060D0F5A71096E00000000000000000C58A".encode('utf-8'))
print( hash.hexdigest() )
Run Code Online (Sandbox Code Playgroud)

我做错了什么?

有没有经验的人可以帮助我?也许发布一段我可以用来进行计算的代码?

但是,任何帮助将不胜感激!非常感谢你的支持...

python crc

7
推荐指数
1
解决办法
9753
查看次数

用于Java/Groovy的CRC-16-ANSI库?

我需要在混合的java/groovy应用程序中为任意字符串计算CRC-16.具体来说,我需要CRC-16-ANSI又称CRC-16-IBM变体(有关详细信息,请参阅http://en.wikipedia.org/wiki/Cyclic_redundancy_check ;这是modbus/USB版本.)

我可以实现自己的,但我更愿意找到一个已经在某种程度上已经测试过的库.

这个问题很简单地涵盖了Java中的CRC 16,但由于正在讨论的应用程序是Xmodem,所以实现的是CRC-16-CCITT,这不是我正在寻找的.

我也模糊地了解sun.misc.CRC16,但是由于Oracle重新组织了Sun网站,因此很难找到该库的文档,我似乎无法找到它实现的CRC风格.

java groovy crc

6
推荐指数
1
解决办法
6009
查看次数

Altera FPGA .jic 文件内的校验和

我正在使用一个小算法修改固件文件 (.jic) JTAG 间接配置文件,但更改文件内的数据会使其无法使用,因为文件中的某处有一个校验和需要更新。

我需要找到 .jic 文件中的校验和并破译使用哪种算法(crc32 等)。

每个字节上的位都被反转,我检查了正常和反转的位文件,但没有成功。

有人知道或者有办法找出 .jic 文件中的校验和数据在哪里吗?

crc fpga intel-fpga

6
推荐指数
1
解决办法
1617
查看次数

标签 统计

crc ×10

java ×3

c# ×2

checksum ×2

crc16 ×2

crc32 ×2

.net ×1

c ×1

elixir ×1

fpga ×1

groovy ×1

hamming-distance ×1

intel-fpga ×1

modbus ×1

python ×1

serial-port ×1

sse ×1

sse4 ×1