当前位置: 首页 > 知识库问答 >
问题:

为什么“1”的CRC会产生生成多项式本身?

竺捷
2023-03-14

在测试CRC实现时,我注意到0x01的CRC通常(?)似乎是多项式本身。然而,当试图手动进行二进制长除法时,我总是以丢失多项式的前导“1”告终,例如,当消息为“0x01”和多项式“0x1021”时,我将得到

      1 0000 0000 0000 (zero padded value)
(XOR) 1 0000 0010 0001
-----------------
      0 0000 0010 0001 = 0x0021

通过查看https://en.wikipedia.org/wiki/computation_of_cyclic_redundancy_checks,我可以看到使用生成多项式离开移位寄存器的高位位的异或步骤将如何导致此结果。我不明白的是,为什么这一步是以这种方式执行的,因为它显然改变了一个真正的多项式除法的结果?

共有1个答案

邢博文
2023-03-14

我刚刚阅读了http://www.ross.net/crc/download/crc_v3.txt,并注意到在第9节中,提到了一个隐式预置的1,以实现所需的多项式宽度。

在我的例子中,这意味着用作除数的实际多项式不是0x1021,而是0x11021。这将导致前导的“1”被删除,其余的是“预期的”16位多项式:

      1 0000 0000 0000 0000 (zero padded value)
(XOR) 1 0001 0000 0010 0001
-----------------
      0 0001 0000 0010 0001 = 0x1021
 类似资料:
  • 我有一项任务,阐述C代码(在x86上运行)的一些看似奇怪的行为。我可以很容易地完成其他一切,但这件事真的让我困惑。 代码段1输出

  • 问题内容: 假设我有三个表A,B和C。每个表都有两列:主键和其他一些数据。它们每个具有相同的行数。如果主键上的I A和B,则我应该得到与其中任一行相同的行数(而不是A.rows * B.rows)。 现在,如果我 使用,为什么我最终会出现重复的行?我有几次遇到这个问题,我不理解。似乎它应该产生与ing相同的结果,并且由于它具有相同的行数,但是会产生重复项。 产生这样结果的查询的格式 这是表的架构。

  • 我正在为PHP中的脚本编写密码生成器,我希望它与我在Java中编写的类兼容,以便它们可以共享资源。 PHP代码: Java代码: PHP调试输出: Java调试输出: 它一直按预期工作到第19个循环。为什么在那之后它会产生不同的输出?

  • 问题内容: 我编写了以下代码来实现Singleton模式: 当我编译此文件时,它应该生成Test.class和Test $ TestHolder.class,但它还会生成Test $ 1.class。这没有道理。那么,为什么以及如何呢? 问题答案: 类需要在中调用私有构造函数。但是它是私有的,实际上不能从另一个类中调用。因此,编译器发挥了作用。它 添加了一个仅知道的新的非私有构造函数!_该构造函数

  • 问题内容: 在我的项目中,我的一个同事非常反对使用运算符,因为它“会产生大量开销”,这是什么原因呢?是真的吗 还有另一种方法可以检查对象的类型而不使用它? 因为我发现它在某些情况下非常有用。 问题答案: 确实产生一些开销,再加上后续的转换。使用最新版本的Java,开销已减少。但是无论如何,这都是微优化-也就是说,在一般情况下,您不必为此担心。 真正的反对意见是,在许多情况下,有更好的OOP方法可以

  • 问题内容: 当我与某些IRC服务器(而非其他IRC服务器)建立SSL连接时(大概是由于服务器的首选加密方法),出现以下异常: 最终原因: 演示此问题的服务器示例是(这是一个IRC服务器)。未显示问题的服务器的示例是。[不足为奇的是,每个网络上的所有服务器都共享相同的行为。] 我的代码(如所述,在连接到某些SSL服务器时有效)是: 是最后一个startHandshake引发异常。是的,’trustA