Skip to content

Instantly share code, notes, and snippets.

@01GOD
Forked from antfarm/CRC32.swift
Created October 29, 2019 13:37
Show Gist options
  • Save 01GOD/3e6bb0b19a0caf138dd4b57e22122ae1 to your computer and use it in GitHub Desktop.
Save 01GOD/3e6bb0b19a0caf138dd4b57e22122ae1 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