如何获得校验和或crc

时间:2015-11-12 00:31:48

标签: checksum crc

我正在尝试开发嵌入式开发工具与现有的具有串行通信的设备进行通信,现有软件使用PC,并且我有snif,如下所示的数据(从PC到设备请求)。

按C0分类数据

FFFF094D00000096E9EAC0
FFFF094E000000F7AA85C0
FFFF094F000000F7EE8EC0
FFFF0950000000F75250C0
FFFF0951000000F7165BC0
FFFF0952000000F7DA46C0
FFFF0953000000F79E4DC0
FFFF0954000000F7427DC0
FFFF0955000000F70676C0
FFFF0956000000F7CA6BC0
FFFF0957000000F78E60C0
FFFF0958000000F7720AC0
FFFF0959000000F73601C0
FFFF095A000000F7FA1CC0
FFFF095B000000F7BE17C0
FFFF095C000000F76227C0

完整/实际数据

FFFE094DFBE8C0FFFF094D00000096E9EAC0
FFFE094E60DAC0FFFF094E000000F7AA85C0
FFFE094FE9CBC0FFFF094F000000F7EE8EC0
FFFE09509F23C0FFFF0950000000F75250C0
FFFE09511632C0FFFF0951000000F7165BC0
FFFE09528D00C0FFFF0952000000F7DA46C0
FFFE09530411C0FFFF0953000000F79E4DC0
FFFE0954BB65C0FFFF0954000000F7427DC0
FFFE09553274C0FFFF0955000000F70676C0
FFFE0956A946C0FFFF0956000000F7CA6BC0
FFFE09572057C0FFFF0957000000F78E60C0
FFFE0958D7AFC0FFFF0958000000F7720AC0
FFFE09595EBEC0FFFF0959000000F73601C0
FFFE095AC58CC0FFFF095A000000F7FA1CC0
FFFE095B4C9DC0FFFF095B000000F7BE17C0
FFFE095CF3E9C0FFFF095C000000F76227C0

已编辑:

我尝试使用以下命令解码使用了以下:

reveng -w 16 -i ffff -p 1021 -s FF094D00000096E9EA FF094E000000F7AA85 FF094F000000F7EE8E

width=16  poly=0x1021  init=0xffff  refin=true  refout=true  xorout=0x7e59  check=0x11c8  name=(none)

我认为从我的数据FF(前面)是标题,最后一个字节(C0)是结束标志,2Byte来自最后一个字节是crc ?,但我已经尝试检查在线计算http://www.lammertbies.nl/comm/info/crc-calculation.html& http://www.zorc.breitbandkatze.de/crc.html数据为FF094D00000096(第一行),我希望得到CRC E9EA,但没什么。

我很感激,如果有人能帮我找到crc模型或校验和

问候,

Shidiq。

1 个答案:

答案 0 :(得分:0)

通过更新的完整消息,CRC有两种解决方案,其中CRC从引入array (size=3) 'inscripcion_id' => int 3926 'nombre' => string 'Prueba' (length=6) 'email' => string 'prueba@prueba.cl' (length=16) FFFE开始应用,最多但不包括CRC,并且不包括FFFF分隔符:

C0

结果CRC在消息之后以小端顺序存储。

我敢打赌,如果你有一组第三长度的消息,那么歧义就会减少到第一个解决方案,初始化为0,最后一次反转。

以下是C中用于计算适用于所有示例的CRC的示例代码:

width=16  poly=0x1021  init=0x0000  refin=true  refout=true  xorout=0xffff check=0xde76  name=(none)
width=16  poly=0x1021  init=0xf01f  refin=true  refout=true  xorout=0x07f0  check=0xde76  name=(none)

如果其中一个CRC字节是#include <stddef.h> static unsigned crc16(unsigned char *dat, size_t len) { unsigned crc = 0; while (len--) { crc ^= *dat++; for (int k = 0; k < 8; k++) crc = crc & 1 ? (crc >> 1) ^ 0x8408 : crc >> 1; } return crc ^ 0xffff; } ,我想知道是否修改了消息。