我有一个非常棘手的问题。我使用 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
}
}
但我没有得到权利"checks"对于任何命令。
也许有人知道这是如何计算的?
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"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)