zlib 的 crc32_combine() 使用 crcA、crcB 和 lengthB 来计算 crcAB。
# returns crcAB
crc32_combine(crcA, crcB, lenB)
Run Code Online (Sandbox Code Playgroud)
使用 Mark Adler在这里和这里的精彩帖子中的概念,我能够生成crc32_trim_trailing.pl,它采用 crcAB、crcB 和 lengthB 来计算 crcA(我用它来剥离已知长度和值的填充)。
# prints crcA
perl crc32_trim_trailing.pl $crcAB $crcB $lenB
Run Code Online (Sandbox Code Playgroud)
不幸的是,这使用了所描述的慢速方法的原则,其中每个空字节必须一次剥离一个。它很慢,但很好地证明了概念。
我一直在努力制作 crc32_trim_trailing 的快速版本,它利用 Mark 的帖子中描述的矩阵技巧,并为 zlib 的 crc32_combine() 中的组合用例实现。
这是我在 crc32_trim_trailing.c 上的尝试。
/* crc32_trim_trailing.c
This code is borrows heavily from crc32.c from zlib version 1.2.8, but has
been altered.
*/
#include <stdio.h>
#define GF2_DIM 32 /* dimension of GF(2) vectors (length of …Run Code Online (Sandbox Code Playgroud)