为什么我们应该在C#中使用由十六进制定义的逆的int版本

时间:2013-01-13 12:20:06

标签: c#

引自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

1 个答案:

答案 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