和校验(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;
}
相关推荐
一隅论数智3 天前
给AI一张“业务概念地图“:本体如何从哲学走向企业智能
大数据·人工智能·经验分享·笔记·学习·学习方法·政务
XiHongShi20163 天前
STM32F407 RTC定时器例程,建议保存
stm32·单片机·学习
爱吃苹果的日记本3 天前
离散数学第六课
学习·离散数学
AI职业加油站3 天前
AI智能体应用工程师证书:政策红利下的职业新风口
大数据·运维·人工智能·学习·职场发展
旖旎夜光3 天前
力控面试题 01.01: 判定字符是否唯一(位运算) —— 题解
c++·学习·算法·leetcode·力控
奇思妙想聪明勤奋的小羊3 天前
DeepAgents第5章:子Agent 与上下文隔离—让 Agent学会委派
人工智能·python·学习·语言模型
霍霍的袁3 天前
【C++】map 和 set 的使用 | 从用法到底层
开发语言·c++·学习·visual studio
彧azz3 天前
Linux 环境下 Redis 学习总结:数据类型、持久化、锁、事务、主从与缓存问题
linux·redis·笔记·学习·面试
我爱cope3 天前
【操作系统 | 计算机硬件:CPU、内存与 I/O 如何支撑操作系统?】
学习·操作系统