CRC32 计算与默认值不匹配

CRC32 calculation doesn't match default one

我正在编写一个程序来计算 Groovy 中的 CRC32。由于某种原因,我没有得到预期值(就像我使用 java.util.zip 实现一样):

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

好的,我自己想出来了。

1)作为基础 remainder java.util.zip.Crc32 使用 0xFFFFFFF。

2) 库实际上在通过与 0xFFFFFFF 异或给出答案之前翻转位。所以基本上我在 return 语句中添加了相同的 XOR 并得到了正确的答案。