将两个CRC32值组合成一个在nodejs中

我想将两个预先计算好的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中提供这个function吗?

既然他们正在使用zlib,你可以让nodejs的作者添加一个接口到zlib的crc32_combine()

除此之外,你可以从zlib复制源代码,并将其重写为js。

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

如果其他人需要这个function,我已经为节点做了模块:

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

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

这就是说,你最好从节点调用zlib C,而不是重新实现它。

Interesting Posts