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 并得到了正确的答案。
我正在编写一个程序来计算 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 并得到了正确的答案。