微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

关于数据流的 crc32 函数说明

如何解决关于数据流的 crc32 函数说明

在哪里可以找到这个 crc32() 函数的详细信息?我看到了这个 Link,但我无法弄清楚 CRC 是如何计算的。 我问了一个关于根据数据流更新CRC而不是等待所有数据的问题。我得到的答案如下(感谢@MarkAdler):

unsigned long crc = crc32(0,NULL,0);    // initial CRC
for (...) {                               // some sort of loop
    ...                                   // generating a chunk of data
    crc = crc32(crc,buf,len);           // update the CRC with the data
    ...                                   // this all gets repeated many times
}
...                                       // loop is done,crc has the CRC
  1. 您能否更具体地了解 crc32() 函数
  2. 是否有任何解释该函数的伪代码
  3. 这里的 for 循环是为了正确获取数据?

谢谢

解决方法

  1. 更具体的方法?
  2. 您想了解如何使用它,或者它是如何在内部工作的?它的内部工作原理在您链接的源代码中。
  3. 是的。您可以从任何地方获取大量数据,并通过 crc32() 将它们馈送以获取整个数据流的 CRC-32/ISO-HDLC。

至于您链接的源代码,它并不是为了向任何人介绍 CRC 的工作原理而编写的。写得很快。这是一个简单但很慢(一次一点)的 C 语言 CRC 例程,它可能会也可能不会帮助你找到你正在寻找的东西:

uint32_t crc32iso_hdlc_bit(uint32_t crc,void const *mem,size_t len) {
    unsigned char const *data = mem;
    if (data == NULL)
        return 0;
    crc = ~crc;
    for (size_t i = 0; i < len; i++) {
        crc ^= data[i];
        for (unsigned k = 0; k < 8; k++) {
            crc = crc & 1 ? (crc >> 1) ^ 0xedb88320 : crc >> 1;
        }
    }
    crc = ~crc;
    return crc;
}

(该代码由 crcany 生成。)

如果您想了解有关 CRC 的更多信息,请开始 here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。