1

引用这篇文章

在许多行业中,第一个多项式用于创建 CRC 表,然后将其应用于性能目的。IEEE 802.3 定义的默认多项式是 0xA001(16 位)和 0×04C11DB7(32 位)。我们在 C# 中,因此我们应该使用它的反转版本,即 0×8408 用于 16 位,0xEDB88320 用于 32 位。我们还将在示例中使用这些多项式。

为什么我们要在 C# 中使用 hex 定义的 int 的逆版本?
引用文章的作者如何将04C11DB7反转为0xEDB88320

我还研究了其他 crc32 C# 和 C 实现。在所有这些中,C 使用 04C11DB7,C# 使用 0xEDB88320

4

1 回答 1

3

请避免假设您在 codeproject.com 文章中阅读的任何内容都是准确的,它不是经过同行评审的网站,并且那里往往有很多废话,无法使用 SO 提供的那种工具轻松修复。

它与语言没有任何关系,当您实现 CRC32 时,位顺序是一个可用的选择,就像多项式是一个选择一样。一个例子是使用反向位顺序的 BZip2 和不使用反向位顺序的 GZip。当您将 0xedb88320 写为位并颠倒它们的顺序时,您可以很容易地看到 0xedb88320 与 0x04c11db7 相反:

0xedb88320 = 1110 1101 ... 0010 0000
reversed   = 0000 0100 ... 1011 0111
to hex     = 0    4    ... B    7

有关它的更多信息,请参阅此Wikipedia 文章部分

于 2013-01-13T14:03:54.357 回答