Pat*_*cks 1 arrays checksum bluetooth-lowenergy swift
我有一个非常棘手的问题。我将一个带有 iOS 设备的字节数组发送到一个工作正常的 ble 设备(led 灯)。我有一份关于所有命令的文档,但从中文翻译的很差。整个字节包是这样构建的:
例如,用于打开灯的完整包装是“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)
但我不明白 任何命令“检查”。
也许有人知道这是如何计算的?
256 - [your checksum algorithm]返回0x59,所以也许就是这样:
var data = Data([0xA1, 0x08, 0x01, 0x00, 0xFF, 0xFF, 0xFF])
extension Data {
var checksum: Int {
return self.map { Int($0) }.reduce(0, +) & 0xff
}
}
let result = 256 - data.checksum
"0x\(String(result, radix: 16))" // "0x59"
Run Code Online (Sandbox Code Playgroud)