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

试图理解不同的CRC实现

富涛
2023-03-14

https://www.kernel.org/doc/documentation/crc32.txt

以这种方式编写的大端CRC代码如下:

for (i = 0; i < input_bits; i++) {
    multiple = remainder & 0x80000000 ? CRCPOLY : 0;
    remainder = (remainder << 1 | next_input_bit()) ^ multiple;
}

哪里是c)M(x)乘以x^32?我没有看到32个零附加在任何数字上。

unsigned short
crc16_update(unsigned short crc, unsigned char nextByte)
{
    crc ^= nextByte;

    for (int i = 0; i < 8; ++i) {
        if (crc & 1)
            crc = (crc >> 1) ^ 0xA001;
        else
            crc = (crc >> 1);
    }

    return crc;
}

共有1个答案

弓胜泫
2023-03-14

本教程(还有这里,这里,还有那些会抱怨链路腐烂的人),特别是“10.一个稍微损坏的表驱动实现”,很好地解释了如何优化,以避免在最后添加额外的32个零位。

底线是将位输入寄存器的末尾而不是开始,这与在结尾输入寄存器长度值为0的效果相同。

教程还很好地展示了您引用的实现是如何在GF(2)上实现长除法的。

 类似资料:
  • 本文向大家介绍angularJS实现不同视图同步刷新详解,包括了angularJS实现不同视图同步刷新详解的使用技巧和注意事项,需要的朋友参考一下 前言 作为angularJS框架MVC中M和V的桥梁,controller在整个angularJS的web应用中有着举足轻重的作用。 通常我们可以使用单例service的方式在不同的controller里面共享数据。比如在controller1中通过点

  • 我正在自学Hadoop和Map Reduce编程模型。我试图理解它的核心元素:我试图将下面的每个元素与下面的特性相匹配: 减速器 组合器 洗牌和排序 映射器 分区器 复制

  • 我试图理解Liskov替换原理,我有以下代码: 我不确定这是否违反了它。原理是,如果你有一个类S的对象,那么你可以用另一个类T的对象来代替它,其中S是T的一个子类。但是,如果我写了 这当然会产生编译错误,因为Vehicle类没有openDoor()方法。但这意味着我不能用它们的父类Vehicle替换VehicleWithDoors对象,这似乎违反了原则。那么这个代码是否违反了它?我需要一个好的解释

  • 当我在UbuntuLinux系统上运行javac时,我会收到一个“package not Existence”错误 从下面的答案中,我知道我需要将“org/voltdb/ProcInfo”中的包添加到我的javac类路径来解决这个错误。Java包不存在错误 但是当我在系统中搜索这样的目录结构时,我没有找到它。 我下载了VoltDB社区版3.5,正在尝试编译和运行一个VoltDB项目。它看起来不像V

  • 我是一个初学者Java学习者,我一直在努力跟随欧拉项目。 我找到了Nayuki对这些问题的解决方案,我很难理解这里接口的需求/用途。英语不是我的第一语言,所以我有点困惑,这里的界面评论到底是什么意思: 据我所知,这意味着我可以运行接口,同时运行所有类,而不是逐个运行每个问题类?所以我不一定需要这个接口来解决问题,它只是一种实用的方法来检查它们是否都按预期的方式工作。 我知道编程是非常抽象的,但是我

  • 我试着看http://ocw.mit.edu/courses/electrice-engineering-and-computer-science/6-006-introduction-to-algorithms-fall-2011/lecture-videos/lecture-4-heaps-and-heap-sort/来理解堆和堆排序,但没有发现这一点。 我不明白max-heapify的功能。