你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

Hex文件格式CRC校验

[复制链接]
虚实 提问时间:2015-1-29 21:32 /
其中的一条记录:1011000071079907E8071008D206FA0671079907D0
0xD0为校验,但不知道怎么编写计算校验的程序。
校验和的算法为:计算从0x3A 以后(不包括0x3A)的所有各字节的和模256的余。即各字节二进制算术和,不计超过256的溢出值后用0x100减去这个算数累加和,得出得值就是此行得校验和。
计算方法有,但看的不是很懂,望指导或者有代码更好
收藏 评论19 发布时间:2015-1-29 21:32

举报

19个回答
虚实 回答时间:2015-1-30 13:45:08
shaoziyang 发表于 2015-1-30 13:33
计算结果是补码啊。其实直接把校验也加上,如果结果是0,说明就是正确的。

0x30+0xD0=256=0 ...

太感谢,困扰我很久了.关于补码问题,没涉及到负数,结果为什么会是补码
虚实 回答时间:2015-1-30 13:08:40
shaoziyang 发表于 2015-1-30 09:23
就这么简单啊,代码自己很容易实现吧。没有什么困难的。

先判断第一个字节是不是冒号,然后判断第2/3字 ...

hex记录结构我了解,就是最后这个校验码算来算去都不对,不知道怎么算的,安你的意思,代码是不是这样。
char  CRC8(char *pData, uint16_t len)  
{  
  uint16_t i;
  uint32_t result = 0;
  for(i = 0; i < len; i++)
  {
    result += pData;
  }
  result = result % 256;
  
  return (char)result;
}
shaoziyang 回答时间:2015-1-30 09:23:51
0度虚实 发表于 2015-1-30 09:05
就这么简单吗,能给个算法吗?

就这么简单啊,代码自己很容易实现吧。没有什么困难的。

先判断第一个字节是不是冒号,然后判断第2/3字节,代表数据类型;在后面是长度、地址等,然后是数据,最后一个字节是校验。找一个HEX文件的说明,很快就可以搞定了。
虚实 回答时间:2015-1-29 21:33:18
自己先顶,坐等啊。。。
shaoziyang 回答时间:2015-1-29 22:48:25
比如用一个字节变量,将前面全部数据累加,然后和最后一个进行比较。
还有,这个不能叫CRC校验的。
拼命三郎 回答时间:2015-1-30 08:05:56
stm32.jpg
拼命三郎 回答时间:2015-1-30 08:27:36
stm32.jpg
虚实 回答时间:2015-1-30 09:05:39
shaoziyang 发表于 2015-1-29 22:48
比如用一个字节变量,将前面全部数据累加,然后和最后一个进行比较。
还有,这个不能叫CRC校验的。
...

就这么简单吗,能给个算法吗?
ataudio 回答时间:2015-1-30 09:11:33
shaoziyang 发表于 2015-1-29 22:48
比如用一个字节变量,将前面全部数据累加,然后和最后一个进行比较。
还有,这个不能叫CRC校验的。
...

CRC有特定算法的。

二十四节气~大雪

二十四节气~大雪
shaoziyang 回答时间:2015-1-30 09:25:30
百科中的解释,可以参考一下。

http://baike.baidu.com/link?url= ... ZCXGaLru14c9oDmRZkq
小菲 回答时间:2015-1-30 11:21:20
怎么和modbus通信协议似的!
shaoziyang 回答时间:2015-1-30 13:14:36
result 改用 uint8_t就可以了。
虚实 回答时间:2015-1-30 13:21:18
技术部-徐亚菲 发表于 2015-1-30 11:21
怎么和modbus通信协议似的!

对,协议和modbus协议数据项都一样的,一个校验码8位,一个16位的,校验方式也不一样
虚实 回答时间:2015-1-30 13:24:11
shaoziyang 发表于 2015-1-30 13:14
result 改用 uint8_t就可以了。

:1011000071079907E8071008D206FA0671079907D0
计算结果还是和原先一样,0x30而不是D0.
校验数据项是1011000071079907E8071008D206FA0671079907
shaoziyang 回答时间:2015-1-30 13:33:09
0度虚实 发表于 2015-1-30 13:24
:1011000071079907E8071008D206FA0671079907D0
计算结果还是和原先一样,0x30而不是D0.
校验数据项是1011 ...

计算结果是补码啊。其实直接把校验也加上,如果结果是0,说明就是正确的。

0x30+0xD0=256=0
12下一页

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版