字节的 Swift 校验和

Pat*_*cks 1 arrays checksum bluetooth-lowenergy swift

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

  • 命令的前面(1个字节)
  • 命令包长度(1字节)
  • 命令的 ID(1 个字节)
  • 命令的控制部分(1字节)
  • 数据字段(15 字节)
  • 检查(1 个字节)

例如,用于打开灯的完整包装是“A1080100FFFFFF59” 到目前为止,一切都对我来说很清楚。我唯一挣扎的是最后一个字节或它在文档中的调用方式:"Check"。文档只是说:“校验码指令:校验码=(0 - 期望整个字节中的字节总和)”。在上面的示例中,“59”将是校验和。但无论我如何计算它,我都不会得到"59"

我找到了好帮手

public extension Data {
    public func checkSum() -> Int {
        return self.map { Int($0) }.reduce(0, +) & 0xff
    } 
}
Run Code Online (Sandbox Code Playgroud)

但我不明白 任何命令“检查”

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