Adler-32 输出与预期值不匹配

Adler-32 output does not match expected values

在我的 .NET 代码中,我需要添加一个 4 字节的 Adler-32 值作为我的 zlib 压缩数据 (RFC 1950) 的尾部。这是我的 C# 函数:

    private static readonly uint Modulus = 65521;
    public static int Adler32(byte[] data, int offset, int length) {
        uint a = 1, b = 0;
        for (int counter = 0; counter < length; ++counter) {
            a = (a + (data[offset + counter])) % Modulus;
            b = (b + a) % Modulus;
        }
        return unchecked((int)((b << 16) + a));
    }

下面是我获取四个字节的方式:

    byte[] data = { 227, 228, 225, 5, 0 }; // compressed data
    int adler32 = Adler32(data, 0, data.Length);

    byte b1 = (byte)((adler32 >> 24) & 0xFF);
    byte b2 = (byte)((adler32 >> 16) & 0xFF);
    byte b3 = (byte)((adler32 >> 8) & 0xFF);
    byte b4 = (byte)((adler32 >> 0) & 0xFF);

问题是,通过检查实际的 zlib 压缩数据,预期的字节应该是 {0, 67, 0, 35} 但我得到的值是 {10, 177, 2, 174} .我做错了什么?问候。

PS:有兴趣的,zlib压缩的实际输入是{9,12,13}。

事实证明函数是正确的。只是原始未压缩数据的校验和必须是 运行 而不是压缩结果。基本上,运行ning Adler32() on {9, 12, 13} 给了我想要的结果。问候。