|
@@ -74,16 +74,15 @@ final class CRC {
|
|
0x4400, 0x84C1, 0x8581, 0x4540, 0x8701, 0x47C0, 0x4680, 0x8641,
|
|
0x4400, 0x84C1, 0x8581, 0x4540, 0x8701, 0x47C0, 0x4680, 0x8641,
|
|
0x8201, 0x42C0, 0x4380, 0x8341, 0x4100, 0x81C1, 0x8081, 0x4040]
|
|
0x8201, 0x42C0, 0x4380, 0x8341, 0x4100, 0x81C1, 0x8081, 0x4040]
|
|
|
|
|
|
- func crc32(message:[UInt8], seed: UInt32? = nil) -> UInt32 {
|
|
|
|
|
|
+ func crc32(message:[UInt8], seed: UInt32? = nil, reflect : Bool = true) -> UInt32 {
|
|
var crc:UInt32 = seed != nil ? seed! : 0xffffffff
|
|
var crc:UInt32 = seed != nil ? seed! : 0xffffffff
|
|
-
|
|
|
|
for chunk in BytesSequence(chunkSize: 256, data: message) {
|
|
for chunk in BytesSequence(chunkSize: 256, data: message) {
|
|
for b in chunk {
|
|
for b in chunk {
|
|
- let idx = Int((crc ^ UInt32(b)) & 0xff)
|
|
|
|
|
|
+ let idx = Int((crc ^ UInt32(reflect ? b : reverseUInt8(b))) & 0xff)
|
|
crc = (crc >> 8) ^ CRC.table32[idx]
|
|
crc = (crc >> 8) ^ CRC.table32[idx]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- return crc ^ 0xffffffff
|
|
|
|
|
|
+ return (reflect ? crc : reverseUInt32(crc)) ^ 0xffffffff
|
|
}
|
|
}
|
|
|
|
|
|
func crc16(message:[UInt8], seed: UInt16? = nil) -> UInt16 {
|
|
func crc16(message:[UInt8], seed: UInt16? = nil) -> UInt16 {
|