Tag: crc16

Concox跟踪器的16位CRC-ITU计算

我正在为服务器程序创建C#代码,该程序通过TCP从Concox TR06 GPS跟踪器接收数据: http://www.iconcox.com/uploads/soft/140920/1-140920023130.pdf 首次启动时,跟踪器会发送一条登录消息,需要在发送任何位置数据之前进行确认。 我的第一个问题是,根据文档,确认消息长18个字节,但它们提供的示例只有10个字节长: 在上表中的Ps,我非常确定的“位”列应该标记为“字节”而不是…… 现在,我的主要问题是计算错误检查。 根据文件: 校验码由CRC-ITU检查方法生成。 从分组长度到信息序列号(包括“分组长度”和“信息序列号”)的协议结构中的数据的校验码是CRC-ITU的值。 好的,所以在上面的例子中,我需要在0x05 0x01 0x00 0x01上计算CRC 现在,我猜测它是16位CRC,如上图所示,CRC长度为2个字节。 我已经在http://www.sanity-free.org/134/standard_crc_16_in_csharp.html和http://www.sanity-free.org/133/crc_16_ccitt_in_csharp.html上实现了我在网上找到的两种不同的CRC实现,但都没有给出我的答案是,根据上图我应该得到 – 0xD9 0xDC。 我甚至使用这个网站 – https://www.lammertbies.nl/comm/info/crc-calculation.html – 手动输入4个字节,但没有任何东西给我我应该得到的结果根据上图… 我可能会出错的任何想法? 任何指针/提示将不胜感激。 谢谢

CRC16 ISO 13239实施

我正试图在C#中实现Crc16。 我已经尝试了很多不同的实现,但是大多数都给了我不同的值。 以下是我已经使用过的一些代码。 private static int POLYNOMIAL = 0x8408; private static int PRESET_VALUE = 0xFFFF; public static int crc16(byte[] data) { int current_crc_value = PRESET_VALUE; for (int i = 0; i < data.Length; i++) { current_crc_value ^= data[i] & 0xFF; for (int j = 0; j > 1) ^ POLYNOMIAL; } else { current_crc_value = […]

如何从C#生成CRC-16

我正在尝试使用C#生成CRC-16。 我用于RS232的硬件要求输入字符串为HEX。 下面的屏幕截图显示了正确的转换。对于测试,我需要8000为0xC061,但生成CRC-16的C#方法必须能够转换任何给定的HEX字符串。 我尝试过使用Nito.KitchenSink.CRC 我也尝试了以下,当输入8000时生成8009 – public string CalcCRC16(string strInput) { ushort crc = 0x0000; byte[] data = GetBytesFromHexString(strInput); for (int i = 0; i < data.Length; i++) { crc ^= (ushort)(data[i] << 8); for (int j = 0; j 0) crc = (ushort)((crc << 1) ^ 0x8005); else crc <<= 1; } } return […]