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() {
        
    }
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容