和校验(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;
}
相关推荐
星恒随风27 分钟前
C++ 继承进阶:默认成员函数、多继承、虚继承与组合设计
开发语言·c++·笔记·学习
电子云与长程纠缠34 分钟前
UE中使用TGuardValue与TInlineComponentArray数据结构
开发语言·数据结构·学习·ue5·游戏引擎
caimouse1 小时前
MM 学习笔记 10:页面文件与系统加载器
笔记·学习·reactos
一只小菜鸡..1 小时前
南京大学 操作系统 (JYY) 学习笔记:Hello, OS World! (程序的机器视角)
java·笔记·学习
lazy H2 小时前
从入门到日常开发,一篇文章掌握 Git 核心操作
git·后端·学习·github
a11177614 小时前
2FA 验证码生成器(github登录验证 app)
笔记·学习
我的xiaodoujiao14 小时前
API 接口自动化测试详细图文教程学习系列32--Allure测试报告2
python·学习·测试工具·pytest
你想知道什么?16 小时前
线性回归-学习笔记
笔记·学习·线性回归
鱼毓屿御16 小时前
从「只会聊」到「边想边做」的跃迁
前端·学习·react.js
AOwhisky17 小时前
Python 学习笔记(第十五期)——运维自动化(下·后篇):堡垒机实战——paramiko高阶篇
运维·python·学习·云原生·自动化·运维开发