iOS的CRC8算法

https://github.com/DingSoung/CRC/tree/d6eadb1ecc6f62c2ba7308ca061041bebd7b7f62

final class CRC8 {
    
    static let poly = 0x07
    static let mask = 0xff
    
    static let table: [UInt8] = {
        
        var table = Array.init(repeating: UInt8(0), count: 256)
        
        for i in 0..<table.count {
            var c = i
            for _ in 0..<8 {
                if c & 0x80 != 0 {
                    c = (((c << 1) & mask) ^ poly)
                } else {
                    c <<= 1
                }
            }
            table[i] = UInt8(c)
        }
        return table
    }()
    
    static func makeCRC8(string: String) -> UInt8 {
        guard let data = string.data(using: String.Encoding.utf8) else { return 0 }
        return makeCRC8(data: data)
    }
    
    static func makeCRC8(data: Data) -> UInt8 {
        let dataArray = [UInt8](data)
        var crc8:UInt8 = 0x00
        for i in 0..<dataArray.count {
            crc8 = table[Int(crc8 ^ dataArray[i])]
        }
        return crc8
    }
    
    static func makeCRC8(data: [UInt8]) -> UInt8 {
        
        var crc8:UInt8 = 0x00
        for i in 0..<data.count {
            crc8 = table[Int(crc8 ^ data[i])]
        }
        return crc8
    }
    
    
    private init() {
        
    }
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容