【问题标题】:CRC32 endianess swappedCRC32 字节顺序交换
【发布时间】:2021-08-07 14:57:24
【问题描述】:

我有两个函数来计算 CRC32:

1)

for (loop = 0u; loop < len; ++loop)
{
    crc = lut[((uint8_t)(crc >> 24) ^ data[loop])] ^ (crc << 8u);
}
for (i = 0u; i < len; i++)
{
    crc = lut[((uint32_t)data[i] ^ crc) & 0xFFu] ^ (crc >> 8u);
}

两者都可以计算出相同的结果,但是:

  • 第二个的查找表具有不同字节序的值
  • 计算后的结果也交换了字节序

问题是为什么会有两种不同的实现方式?是否有像第二个示例中那样用于计算的特定名称?

【问题讨论】:

    标签: crc32


    【解决方案1】:

    如果表也进行了字节交换,那么在对其中一个结果进行字节交换后,它们显然是等价的。

    通常我看到 不同 CRC 的这两种形式的 CRC 计算,因为一种使用位反射多项式(带有&gt;&gt; 的代码),另一种使用普通多项式(“

    但是我还没有看到有人拿了其中一个然后字节交换表并从“>”或反之亦然的情况。我不认为有一个名字。

    我可能为这样的事情想象的应用程序是,有人必须在最后对结果进行字节交换,以便更容易将 CRC 以某种预定义的格式放置,然后他们意识到如果相反,他们可以避免字节交换将其内置到表格中以及计算时的移动方向。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-16
      • 2018-07-05
      • 2022-01-22
      • 2020-03-27
      相关资源
      最近更新 更多