1

我想将两个预先计算的 crc32 组合成一个新的:

nodejs中的示例代码:

// i'm using crc32 lib: https://github.com/brianloveswords/buffer-crc32/blob/master/index.js
var crc32 = require('buffer-crc32');

var foo = new Buffer('foo');
var bar = new Buffer('bar');

var fooCrc32 = crc32(foo); // <Buffer 8c 73 65 21>
var barCrc32 = crc32(bar); // <Buffer 76 ff 8c aa>

// how to combine crc32 of foo and crc32 of bar to get crc32 of 'foobar'
var foobarCrc32 = some_function(fooCrc32, barCrc32);  // <Buffer 9e f6 1f 95> 

如何在nodejs中做到这一点?我知道这是可能的,因为 zlib crc32_combine 函数:

ZEXTERN uLong ZEXPORT crc32_combine OF((uLong crc1, uLong crc2, z_off_t len2)); 将两个 CRC-32 校验值合二为一。对于长度为 len1 和 len2 的两个字节序列 seq1 和 seq2,分别计算 crc1 和 crc2 的 CRC-32 校验值。crc32_combine() 返回 seq1 和 seq2 连接的 CRC-32 校验值,只需要 crc1、crc2 和 len2。

但是我不知道如何在nodejs中实现它。nodejs 中是否有任何库可以执行此操作,或者可能有一些 GIST?任何人都可以在nodejs中提供该功能吗?

4

3 回答 3

2

由于他们无论如何都在使用 zlib,因此您可以要求 nodejs 作者将接口添加到 zlib 的crc32_combine().

除此之外,您可以从 zlib 复制源代码并用 js 重写它。

请注意,只有两个 crc 是不够的。您需要两个 crc第二块的长度。

于 2013-05-29T14:41:46.107 回答
2

如果其他人需要该功能,我已经为节点制作了模块:

https://github.com/tereska/node-crc-utils

于 2013-05-30T17:38:41.960 回答
0

应该可以在Node中实现该操作,这是zlib中的代码:http ://www.raspberryginger.com/jbailey/minix/html/crc32_8c-source.html#l00370

话虽如此,您最好从节点调用 zlib C,而不是重新实现它。

于 2013-05-30T00:45:52.093 回答