CCITT CRC-16 计 算 原 理 与 实 现 CRC 的 全 称 为 Cyclic Redundancy Check, 中 文 名 称 为 循 环 冗 余 校 验 。 它 是 一 类重 要 的 线 性 分 组 码 , 编 码 和 解 码 方 法 简 单 , 检 错 和 纠 错 能 力 强 , 在 通 信 领 域 广 泛地 用 于 实 现 差 错 控 制 。 实 际 上 , 除 数 据 通 信 外 , CRC 在 其 它 很 多 领 域 也 是 大 有 用武 之 地 的 。 例 如 我 们 读 软 盘 上 的 文 件 , 以 及 解 压 一 个ZIP 文 件 时 , 偶 尔 会 碰 到“ Bad CRC” 错 误 , 由 此 它 在 数 据 存 储 方 面 的 应 用 可 略 见 一 斑 。 差 错 控 制 理 论 是 在 代 数 理 论 基 础 上 建 立 起 来 的 。 这 里 我 们 着 眼 于 介 绍 CRC 的 算 法与 实 现 , 对 原 理 只 能 捎 带 说 明 一 下 。 若 需 要 进 一 步了解 线 性 码 、分 组 码 、循 环 码 、纠 错 编 码 等方 面 的 原 理 , 可 以 阅读 有 关资料。 利用 CRC 进 行检 错 的 过程可 简 单 描述为 :在 发送端根据 要 传送的 k 位二进 制 码 序列, 以 一 定的 规则产生一 个 校 验 用 的r 位监督码 (CRC 码 ), 附在 原 始信 息后边,构成一 个 新的 二进 制 码 序列数 共k+r 位, 然后发送出去。 在 接收端, 根据 信 息码和 CRC 码 之 间所遵循 的 规则进 行检 验 , 以 确定传送中 是 否出错 。 这 个 规则, 在 差错 控 制 理 论 中 称 为 “ 生成多 项式” 。 1 代 数 学的 一 般性 算 法 在 代 数 编 码 理 论 中 , 将一 个 码 组 表示为 一 个 多 项式, 码 组 中 各码 元当作多 项式的系数 。 例 如 1100101 表示为 1·x6+1·x5+0·x4+0·x3+1·x2+0·x+1, 即 x6+x5+x2+1。 设编 码 前的 原 始信 息多 项式为P(x), P(x)的 最高幂次加 1 等于 k;生成多 项式为G(x), G(x)的 最高幂次等于 r;CRC 多 项式为 R(x);编 码 后的 带 CRC 的 信 息多 项式为 T(x)。 发送方 编 码 方 法 :将P(x)乘以 xr(即对 应 的 二进 制 码 序列左移 r 位)...