In meinem .NET-Code muss ich einen 4-Byte-Adler-32-Wert als Trailer zu meinen komprimierten zlib-Daten hinzufügen (RFC 1950). Hier ist meine C# Funktion:Adler-32-Ausgabe stimmt nicht mit den erwarteten Werten überein
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));
}
Und hier ist, wie ich meine vier Bytes bin immer:
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);
Das Problem ist, von der Prüfung einer tatsächlichen zlib-komprimierte Daten, die erwarteten Bytes sein sollen {0, 67, 0, 35}, aber die Werte, die ich bekomme, sind {10, 177, 2, 174}. Was mache ich falsch? Grüße.
PS: Für diejenigen, die interessiert sind, ist die tatsächliche Eingabe für zlib-Komprimierung {9, 12, 13}.