如何解决关于数据流的 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
谢谢
解决方法
- 更具体的方法?
- 您想了解如何使用它,或者它是如何在内部工作的?它的内部工作原理在您链接的源代码中。
- 是的。您可以从任何地方获取大量数据,并通过
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 举报,一经查实,本站将立刻删除。