和校验(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;
}
相关推荐
青山是哪个青山13 小时前
LangChain 学习笔记(四):Message 与提示词模板
笔记·学习·langchain
hsjiasb14 小时前
FreeRTOS学习(二十六)——动态内存管理heap_1到heap_5
stm32·单片机·学习·学习笔记·freertos
崇子嵘15 小时前
基于zynqMP15eg的linux驱动学习
学习
知识分享小能手17 小时前
线性代数学习教程,从入门到精通,向量组的线性相关性 — 完整知识点梳理(7)
学习·线性代数·机器学习
Shell运维手记17 小时前
Linux 常用基础命令学习笔记
linux·运维·笔记·学习·算法·github
动词ing18 小时前
【学习笔记】C语言(数组指针与指针数组+字符数组+函数+参数传递+字符串作为形参+递归函数+指针函数+回调函数+结构体嵌套+内存动态分配函数)
c语言·笔记·学习
小O的算法实验室19 小时前
IEEE TII,学习为多目标深度学习生成偏好
人工智能·深度学习·学习
吃好睡好便好20 小时前
说说高温对情绪的影响
学习·生活·情绪·高温
for_ever_love__21 小时前
python基础语法学习: 文件操作
python·学习
m4Rk_21 小时前
【论文阅读】Agent 记忆机制(38):AMA——用多智能体协作动态选择记忆粒度
论文阅读·人工智能·学习