Skip to content

Instantly share code, notes, and snippets.

@zinwalin
Forked from antfarm/CRC32.swift
Created April 28, 2022 06:14
Show Gist options
  • Save zinwalin/6ee82a14c55a70ae6f45772dae9bbd7f to your computer and use it in GitHub Desktop.
Save zinwalin/6ee82a14c55a70ae6f45772dae9bbd7f to your computer and use it in GitHub Desktop.
CRC32 checksum generation in a few lines of Swift 5. https://en.wikipedia.org/wiki/Cyclic_redundancy_check#CRC-32_algorithm
class CRC32 {
static var table: [UInt32] = {
(0...255).map { i -> UInt32 in
(0..<8).reduce(UInt32(i), { c, _ in
(c % 2 == 0) ? (c >> 1) : (0xEDB88320 ^ (c >> 1))
})
}
}()
static func checksum(bytes: [UInt8]) -> UInt32 {
return ~(bytes.reduce(~UInt32(0), { crc, byte in
(crc >> 8) ^ table[(Int(crc) ^ Int(byte)) & 0xFF]
}))
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment