Ich schreibe ein Programm, um CRC32 in Groovy zu berechnen. Aus irgendeinem Grund kann ich nicht mit den erwarteten Wert (das gleiche wie wenn ich java.util.zip
Implementierung verwendet):CRC32 Berechnung stimmt nicht überein Standard
def crc32(byte[] bytes) {
return new java.util.zip.CRC32().with { update bytes; value }
}
def myCrc32(byte[] bytes) {
def remainder = 0x0
def multiple = 0
def poly = 0xEDB88320
bytes.each { b ->
remainder ^= b
for (int i = 0; i < 8; i++) {
multiple = (remainder & 1) ? poly : 0;
remainder = (remainder >> 1)^multiple;
}
}
return remainder
}
def origFile = 'file'
def fileBytes = new File(origFile).text.getBytes()
def origRes = crc32(fileBytes)
def myRes = myCrc32(fileBytes)
println origRes
println myRes
Wo tat ich einen Fehler? Ich habe die folgenden Quellen als Leitfaden:
Ergebnisse, die ich bekomme:
1838399800 - original
4005013284 - my calculation