我正在编写一个程序来计算Groovy中的CRC32。出于某种原因,我没有得到预期的价值(就像我使用SELECT * FROM student s
LEFT JOIN enrollments e ON s.studentNumber = e.studentNumber
LEFT JOIN grades g ON e.studentNumber = g.studentNumber
WHERE e.subject = g.subject
实施一样):
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
答案 0 :(得分:1)
好的,我自己想通了。
1)基础java.util.zip.Crc32
0xFFFFFFF
使用0xFFFFFFF。
2)实际上,在通过与return
进行异或来给出答案之前,库实际上会翻转位。所以基本上我在shared void insert<R>(DSLContext ctx, Table<R&Record> table, Set<TableField<R&Record, Object>> fields, Set<Object> values){
ctx.insertInto(table).columns(fields).values(values).execute();
}
语句中添加了相同的XOR并得到了正确答案。