hash - 即时计算CRC,可能与否
问题描述
是否可以动态计算 CRC(在流中)?
例如,我有 1 GB 的数据,我想减少未检测到错误的可能性。我想在整个文件上实现一些东西(CRC或哈希),(我已经为每个包含一些数据包的块实现了CRC),
当我们在整个文件上放置一个 CRC 时,是否可以在我们收到第一个数据包后立即开始计算 CRC,或者我们是否必须等待整个文件被接收然后开始计算 CRC?
解决方案
是的。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
推荐阅读
- notifications - 无法区分 Odoo 12 中的注释和消息
- c# - 尝试创建初始迁移 EF Core 3 asp.net Core 时出错
- javascript - 如何在 Codesandbox 在线编辑器中使用 dotenv
- vim - 如何将 IAR .ewp 转换为 LSP compile_commands.json 数据库
- python - 在 python 中使用生成器了解执行顺序
- javascript - 使用 vue-cli 3.x 加载静态资源
- java - 将 ResultSet.getString 值与来自文本字段的输入进行比较
- angular - 如何根据来自另一台服务器的结果重定向我的前端 (Angular) 应用程序
- asp.net - 除了第一页,fancybox 不适用于 aspxgridview 页面
- vb.net - 如何使用 vb.net 或任何其他方式单击从多个文件夹中打开 .exe 文件?