CheckSum总和校验码实现原理

在远距离通信中,保证数据完整性和准确性,在数据最后附上总和检验码是很有必要的,带上一个1字节的数据,效率高也起到了一定的安全性。

Checksum:总和检验码,校验总和。在数据处理和数据通信领域中,用于校验目的的一组数据项的和。这些数据项可以是数字或在计算检验总和过程中看作数字的其它字符串。

 

它通常是以十六进制为数制表示的形式,如 0102030405060708

原理:

通常我们采用1字节的方式进行校验和计算,

Xsum = X1 ‖ X2 ‖… ‖ XN. Xi (i = 1, 2, …  N) 为1字节数据。下标i 为由左至右的字节序号。

校验和的计算

 

CheckSum = (~(X1 ‖ X2 ‖… ‖ XN) + 1) mod 100h

 

校验和的检验

如果 ((X1 ‖ X2 ‖… ‖ XN) + Check-Sum) mod 100h 为0.说明校验成功,否则失败。

本源码的ln限制在:(2的32次方-1)除以255

实现源码:

unsigned char CheckSum(unsigned char* p, unsigned long ln)
{
    unsigned long sum = 0;
    for(unsigned long i(0);i<ln;i++)
    {
        sum += p[i];
    }
    sum = ~sum;
    return ((sum + 1)%0x100);
}

bool CheckCheckSum(unsigned char* p, unsigned long ln, unsigned char c)
{
    unsigned long sum = 0;
    for(unsigned long i(0);i<ln;i++)
    {
        sum += p[i];
    }
    sum += c;
    if(sum%0x100 == 0)
        return 1;
    else
        return 0;
}


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

敏哥搞wifi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值