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

C# 为什么我们应该使用C中十六进制定义的int的逆版本#,c#,C#,引自: 在许多行业中,第一个多项式用于创建CRC表,然后用于性能目的。IEEE 802.3定义的默认多项式16位为0xA001,32位为0×04C11DB7我们在C#中,因此我们应该使用它的反转版本,16位为0×8408,32位为0xEDB88320。我们也将在样本中使用这些多项式 为什么要使用C#中十六进制定义的int的逆版本? 引用文章的作者是如何将04C11DB7转化为0xEDB88320的 此外,我还研究了其他CRC32C和C实现。C使用04C11DB7,C#使用0xEDB88320。请

引自:

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

为什么要使用C#中十六进制定义的int的逆版本?
引用文章的作者是如何将04C11DB7转化为0xEDB88320的


此外,我还研究了其他CRC32C和C实现。C使用04C11DB7,C#使用0xEDB88320。请避免假设您在codeproject.com文章中读到的任何内容都是准确的,它不是一个经过同行评审的网站,而且那里往往有很多废话,用目前可用的工具很难解决

它与语言无关,当您实现CRC32时,位顺序是一种选择,就像多项式是一种选择一样。例如,BZip2使用反向位顺序,GZip不使用。当您将0xedb88320写入位并颠倒其顺序时,您可以很容易地看到0xedb88320与0x04c11db7相反:

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

更多信息请参见本节。

取决于数据流的结尾。一旦数据被缓冲到更高的级别,您就可以任意读取它。