引自this article:
在许多行业中,第一个多项式用于创建CRC表,然后将其用于性能目的。由IEEE 802.3定义的默认多项式对于16位为0xA001,对于32位为0×04C11DB7。 我们在C#中,因此我们应该使用其反转版本,对于16位为0×8408,对于32位为0xEDB88320。我们将在我们的样本中使用这些多项式。
为什么我们要在C#中使用由hex定义的int的逆版本?
引文的作者如何将 04C11DB7 转换为 0xEDB88320 ?
此外,我还研究了其他crc32 C#和C实现。在所有这些中,C使用04C11DB7,C#使用0xEDB88320
答案 0 :(得分:3)
请避免假设您在codeproject.com文章中读到的任何内容都是准确的,它不是经过同行评审的网站,并且往往存在很多无意义的内容,无法使用SO提供的工具轻松修复。
它与语言没有任何关系,当您实现CRC32时,位顺序是可用的选择,就像多项式是一个选择一样。一个例子是使用反向位顺序的BZip2和不使用反向位顺序的GZip。当你把它写成比特并反转它们的顺序时,你可以很容易地看到0xedb88320与0x04c11db7相反:
0xedb88320 = 1110 1101 ... 0010 0000
reversed = 0000 0100 ... 1011 0111
to hex = 0 4 ... B 7
有关此问题的详情Wikipedia article section。