CRC(循环冗余校验)

推荐视频:【[CRC校验]手算与直观演示】 https://www.bilibili.com/video/BV1V4411Z7VA/?share_source=copy_web&vd_source=aa01db4de35fb1b44860cdd9aa71f643
详细讲解实现原理,也就是直接计算法。

CRC有以下几种方法,每种方法在计算效率、代码大小和硬件资源消耗上各有侧重:

直接计算法(按位处理)、字节查表法、半字节查表法、硬件CRC模块、利用CPU特有指令、并行算法(基于数学变换)

图片

虽然最常见的实现是按字节查表(256项),但这并不是唯一的标准。表项数量(即表格大小)与处理宽度(即查找位数)是指数关系:表格大小 = 2 ^ 一次处理的位数。

1. 按字节查表(最常见):256 项

这是最经典的平衡点。

* 处理粒度: 每次处理 8 位(1 字节)。

* 表格大小: 2^8 = 256 个表项。

* 存储空间:

如果是 CRC16(输出 16 位,即 2 字节),表格占用 256 × 2 = 512 字节。

如果是 CRC32(输出 32 位,即 4 字节),表格占用 256 × 4 = 1024 字节。

* 评价: 这是速度(查表次数少)和内存占用(1KB左右几乎可以忽略)的黄金平衡点。绝大多数通用场景都使用它。

2. 按半字节查表:16 项

* 处理粒度: 每次处理 4 位(半个字节)。

* 表格大小: 2^4 = 16 个表项。

* 存储空间:

CRC16 表格仅需 16 × 2 = 32 字节。

CRC32 表格仅需 16 × 4 = 64 字节。

* 评价: 为了节省内存,牺牲了速度(因为处理一个字节需要查两次表)。常用于廉价的单片机。

posted @ 2026-03-11 21:29  心事不在脸上  阅读(44)  评论(0)    收藏  举报