Swift 字节校验和

Swift checksum of bytes

我有一个非常棘手的问题。我将带有 iOS 设备的字节数组发送到工作正常的 ble 设备(led 灯)。 我有一份所有命令的文档,中文翻译得很差。 整个字节包是这样构建的:

例如,用于开灯的完整包是 "A1080100FFFFFF59" 到目前为止,一切对我来说都很清楚。我唯一纠结的是最后一个字节或它在文档中的调用方式:"Check"。 文档只是说:"The instruction of check code: check code=(0 - expect the sum of byte in whole byte)"。 在上面的示例中,"59" 将是校验和。但无论我如何尝试计算它,我都不会得到 "59".

我找到了可爱的小帮手

public extension Data {
    public func checkSum() -> Int {
        return self.map { Int([=11=]) }.reduce(0, +) & 0xff
    } 
}

但是我没有得到任何命令的正确 "checks"

也许有人知道这是如何计算的?

256 - [your checksum algorithm]returns0x59,也许就是这样:

var data = Data([0xA1, 0x08, 0x01, 0x00, 0xFF, 0xFF, 0xFF])

extension Data {
    var checksum: Int {
        return self.map { Int([=10=]) }.reduce(0, +) & 0xff
    }
}

let result = 256 - data.checksum
"0x\(String(result, radix: 16))" // "0x59"