CRC-32: Difference between revisions
Content added Content deleted
Thundergnat (talk | contribs) m (Fix Perl6 -> Raku in comments) |
(Added Wren) |
||
Line 2,373: | Line 2,373: | ||
Crc32 = 414FA339 |
Crc32 = 414FA339 |
||
Crc32 = 414FA339</lang> |
Crc32 = 414FA339</lang> |
||
=={{header|Wren}}== |
|||
{{trans|Go}} |
|||
<lang ecmascript>var toHex = Fn.new { |n| |
|||
var digits = "0123456789abcdef" |
|||
if (n == 0) return 0 |
|||
var neg = false |
|||
if (n < 0) neg = true |
|||
var hex = "" |
|||
while (n > 0) { |
|||
hex = hex + "%(digits[n%16])" |
|||
n = (n/16).floor |
|||
} |
|||
return (neg) ? "-" : "" + hex[-1 .. 0] |
|||
} |
|||
class CRC32 { |
|||
static init() { |
|||
__table = List.filled(256, 0) |
|||
for (i in 0..255) { |
|||
var word = i |
|||
for (j in 0..7) { |
|||
if (word&1 == 1) { |
|||
word = (word >> 1) ^ 0xedb88320 |
|||
} else { |
|||
word = word >> 1 |
|||
} |
|||
} |
|||
__table[i] = word |
|||
} |
|||
} |
|||
static compute(s) { |
|||
var crc = ~0 |
|||
var le = s.bytes.count |
|||
for (i in 0...le) { |
|||
var crb = crc & 0xff |
|||
crc = __table[crb^s[i].bytes[0]] ^ (crc >> 8) |
|||
} |
|||
return ~crc |
|||
} |
|||
} |
|||
CRC32.init() |
|||
var crc = CRC32.compute("The quick brown fox jumps over the lazy dog") |
|||
System.print(toHex.call(crc))</lang> |
|||
{{out}} |
|||
<pre> |
|||
414fa339 |
|||
</pre> |
|||
=={{header|XPL0}}== |
=={{header|XPL0}}== |