和(checksum)校验算法

本文介绍和(checksum)校验算法。

和校验应用场合还是比较多的,比如常见的HEX文件,S-Record文件都用到了和校验,当然,和校验并没有标准,不同的和校验计算方法也不尽相同,但本质都是累加求和(有些地方也叫异或)只是在结果的处理上稍有不同。

下面介绍几种常用的和校验算法。

1.累加和取反

uint8_t CalcChecksum(uint8_t *pBuf, uint32_t nLength)
{
    uint8_t checksum = 0;

    while (nLength--)
    {
        checksum += *pBuf++;
    }

    checksum = (uint8_t)(0xff - checksum);
    //checksum = ~checksum;

    return checksum;
}

这种校验算法,针对结果进行了按位取反,有些地方描述是用0xff-累加和,其效果是一样的,S-Record文件的校验和算法就是这样设计的。校验数据是否正确时,可将数据与校验码和一起计算在加1,如果和(uint8_t类型)为0,则校验正确,否则错误。

2.累加和求补码

uint8_t CalcChecksum(uint8_t *pBuf, uint32_t nLength)
{
    uint8_t checksum = 0;

    while (nLength--)
    {
        checksum += *pBuf++;
    }

    checksum = (~checksum) + 1;

    return checksum;
}

这种校验算法,针对结果取其补码,HEX文件的校验和算法就是这样设计的,这样设计的好处是数据与校验和一起计算校验和,如果校验和正确会得到0值,否则错误。

3.直接返回累加和

uint8_t CalcChecksum(uint8_t *pBuf, uint32_t nLength)
{
    uint8_t checksum = 0;

    while (nLength--)
    {
        checksum += *pBuf++;
    }

    return checksum;
}

这种校验算法,针对结果不做任何处理,程序判断时需要直接比较2者值是否一致。

总结,本文介绍了和(checksum)校验算法,并给出其C代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值