如何解决动态计算CRC,可能与否
是否可以即时(在流中)计算CRC?
例如,我有1 GB的数据,我想减少未被发现的错误的可能性。 我想在整个文件中实现一些内容(CRC或哈希), (我已经为每个块(其中包含一些数据包)实现了CRC),
当我们将CRC放在整个文件上时,是否有可能在拥有第一个数据包后立即开始计算CRC,还是必须等待接收到整个文件然后开始计算CRC? / p>
解决方法
是的。 CRC和我所知道的每个哈希都可以流式传输。它们具有一个很小的有限状态,该状态随着数据通过它们的更新而更新。对于CRC,状态为CRC本身。
zlib中的CRC采用以下形式:
unsigned long crc32(unsigned long crc,const unsigned char *buf,unsigned len);
当buf
为NULL
时,返回初始CRC。因此它的用法如下:
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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。