如何计算 24 位长十六进制的 CRC-32例如 0xAAAAAA00?

问题描述

通常,CRC-32 是针对 32 位及其倍数计算的。我想计算 24 位数字的 CRC-32。如何执行此类操作。我不是计算机科学背景,所以对 CRC-32 没有透彻的了解,所以请帮忙。

解决方法

实际的数学计算实际上是在计算 CRC 时将 32 个零位附加到 24 位数字。软件版本通过根据需要循环 CRC 来模拟这一点。

为简化起见,假设数字以大端格式存储。然后可以将 24 位值放入 32 位寄存器,并且 32 位寄存器循环 32 次(模拟附加 32 个零位)以产生 CRC。由于将24位数字放入32位寄存器后会产生8个前导零位,因此第一步可以将24位数字左移8位,然后循环CRC 24次。

如果使用查表一次处理一个字节和保存 24 位数字的 3 字节数据,则该进程将下一个字节异或到 32 位 CRC 寄存器的高 8 位,然后使用该表进行模拟循环 32 位 CRC 8 次。