累加和校验算法的实现

前言
因为外界总会对电路存在或多或少的干扰,对于数字信号,很可能导致传输的数据出现千差万别。
对于很多需要传输数据的场合,尤其是一些数据可能会影响一些硬件的动作(诸如嵌入式的一些设备、机器人等),错误的数据可能会带来一些隐性风险,想想都可怕。
由于本人是嵌入式相关领域的,平时玩的都是单片机,当然单片机的性能千差万别,不过很多的性能都只能说是勉强够用,毕竟成本考虑。
所以今天的校验算法,比较简单,但是有效,尤其是一些性能一般的硬件。
说道今日主角:累加和校验算法,又名checksum算法。至于出处,这里就不考究了。
累加和校验算法的实现
发送方:
对要数据累加,得到一个数据和,对和求反,即得到我们的校验值。然后把要发的数据和这个校验值一起发送给接收方。
接收方:
对接收的数据(包括校验和)进行累加,然后加1,如果得到0,那么说明数据没有出现传输错误。
注意,此处发送方和接收方用于保存累加结果的类型一定要一致,否则加1就无法实现溢出从而无法得到0,校验就会无效。
还是举个例子:
发送方:要发送0xa8,0x50,我们使用unsigned char(8位)来保存累加和,即为0xf8(0b11111000),取反得到校验和为0x07(0b00000111)。然后将这三个数据发送出去。
接收方:如果接收正确,这三个数据的累加和就是(0b11111111),此时加1,则得到的结果为0(实际得到的应该是0b100000000,但是由于是使用unsigned char(8位)来保存累加和,所以高位被截取掉,只剩下了低八位的8个0).
由上面的例子,我们可以知道算法的目的是:使累加和和校验值相加得到一个二进制下每一位都是1的结果,这个结果很明显很好处理,这种算法实现起来也很简单,下面给出c语言的代码示例。
发送方:以下是如何得到校验值的代码,结果就是我们想要的校验值。
接收方:输入已包含发送发发来的校验值,如果函数返回的值如果是0,说明数据正确。


如何制作USB声卡
低温下手机电池为什么耗电加快?
R&S和Applus在EMC测试环境中完成eCall测试
储能领域值得关注的四大趋势
福利来了!研华Windows开发工具Power Suite
累加和校验算法的实现
冻肉怕风干!海尔博观冰箱:风冷不风干
日光灯故障维修
采访秦海波:洲明科技专研智慧灯杆,助力5G智慧城市建设
探索光学镜头技术前沿
如何使用python减少数据集中的特性数量
赋能汽车照明系统的车用LED与驱动技术
几家科技巨头公司就税收出席美国政府听证会
我国人工智能产业的发展现状以及未来趋势
封装设计中的电气性能考量
在未来人们将会采用VR/AR技术来进行购物
液态金属可以成为一种很有前途的替代传统电极的方法
运营商的工作到底是怎样的?员工:高层天天谈转型,基层只能含泪转行
全球储能市场中抽水蓄能仍占绝对优势,累计装机规模为171GW
采用LM2677-ADJ制作的恒压源电子电路图