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 字节。
* 评价: 为了节省内存,牺牲了速度(因为处理一个字节需要查两次表)。常用于廉价的单片机。
浙公网安备 33010602011771号