和校验(CheckSum)

文章目录

算法介绍

和校验是最简单、最直观的检错编码方法,属于检错码(不能纠错)。

核心思想:

把数据的所有字节按位相加,将结果的低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;
}
相关推荐
遇印记10 小时前
传输层,网络层
运维·服务器·网络·windows·学习
clorinda11 小时前
PyQt5学习:从界面搭建到与机器学习实战
学习
欣欣之王来了13 小时前
Vue3项目脚手架:Vite vs Vue CLI怎么选?
前端·学习·架构·项目·vue3教程
kaixin_啊啊13 小时前
【零基础学AI】第 7 章——让 AI 辅助学习和办公
人工智能·学习
信奥卷王13 小时前
[GESP202506 六级] 学习小组(含视频)
学习
宛 禾14 小时前
Qt 控件入门:QLabel 从拖拽到对象树,一篇讲透
c++·qt·学习
无敌贵点大王15 小时前
嵌入式软件面试经(自用)
c语言·stm32·单片机·学习·mongodb·面试·职场和发展
Xudde.15 小时前
PwnLab: init 靶机渗透测试(Vulnhub Writeup)
笔记·学习·安全·web安全
我命由我1234515 小时前
Function Calling 模型
人工智能·python·学习·ai·学习方法·ai编程·ai写作
别动我齐刘海15 小时前
实时控制学习2
linux·c++·人工智能·学习·算法