-
Notifications
You must be signed in to change notification settings - Fork 0
/
crc32.sf
34 lines (29 loc) · 809 Bytes
/
crc32.sf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#!/usr/bin/ruby
# Simple implementation of the Cyclic Redundancy Check (CRC32).
# Reference:
# https://web.archive.org/web/20240718094514/https://rosettacode.org/wiki/CRC-32
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