27 lines
630 B
Text
27 lines
630 B
Text
func create_crc32_table {
|
|
256.of {|k|
|
|
8.times {
|
|
if (k & 1) {
|
|
k >>= 1
|
|
k ^= 0xedb88320
|
|
}
|
|
else {
|
|
k >>= 1
|
|
}
|
|
}
|
|
k
|
|
}
|
|
}
|
|
|
|
func crc32(str, crc = 0) {
|
|
static crc_table = create_crc32_table()
|
|
crc &= 0xffffffff
|
|
crc ^= 0xffffffff
|
|
str.codes.each {|c|
|
|
crc = ((crc >> 8) ^ crc_table[(crc & 0xff) ^ c])
|
|
}
|
|
return ((crc & 0xffffffff) ^ 0xffffffff)
|
|
}
|
|
|
|
say crc32("The quick brown fox jumps over the lazy dog").as_hex
|
|
say crc32("over the lazy dog", crc32("The quick brown fox jumps ")).as_hex
|