Я пишу программу для вычисления CRC32 в Groovy. По какой-то причине я не получаю ожидаемое значение (то же самое, как если бы я использовал java.util.zip
реализации):Расчет CRC32 не соответствует по умолчанию
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
Где я делаю ошибку? Я использовал следующие источники в руководстве:
Результаты, которые я получаю:
1838399800 - original
4005013284 - my calculation