文章目录
算法介绍
和校验是最简单、最直观的检错编码方法,属于检错码(不能纠错)。
核心思想:
把数据的所有字节按位相加,将结果的低8位(或低16位)作为校验码,附加在数据末尾一起发送。
bash
┌─────────────────────────────────────────────┐
│ 发送方 │
│ │
│ 数据:D₁ D₂ D₃ ... Dₙ │
│ ↓ ↓ ↓ ↓ │
│ 相加:S = D₁+D₂+D₃+...+Dₙ │
│ ↓ │
│ 校验和:CS = S 的低8位(模256) │
│ ↓ │
│ 发送:D₁ D₂ D₃ ... Dₙ CS │
└─────────────────────────────────────────────┘
┌─────────────────────────────────────────────┐
│ 接收方 │
│ │
│ 收到:D₁' D₂' D₃' ... Dₙ' CS' │
│ ↓ ↓ ↓ ↓ │
│ 相加:S' = D₁'+D₂'+...+Dₙ' + CS' │
│ ↓ │
│ 判断:S' 的低8位 = 0 ? │
│ ✅ = 0 → 可能正确 │
│ ❌ ≠ 0 → 一定有错 │
└─────────────────────────────────────────────┘
常见形式及实现
优缺点分析

检不出的错误类型

常见类型及实现方法(以python为例)
8位和校验:
bash
uint8_t CheckSum(uint8_t *Buf, uint8_t Len)
{
uint8_t i=0;
uint8_t sum =0;
for(i=0;i<Len; i++)
{
sum += *Buf++;
}
return sum;
}
16位和校验:
bash
uint16_t CheckSum(uint16_t *Buf, uint8_t Len)
{
uint8_t i=0;
uint16_t sum =0;
for(i=0;i<Len; i++)
{
sum += *Buf++;
}
return sum;
}