Swift 字节校验和
Swift checksum of bytes
我有一个非常棘手的问题。我将带有 iOS 设备的字节数组发送到工作正常的 ble 设备(led 灯)。
我有一份所有命令的文档,中文翻译得很差。
整个字节包是这样构建的:
- 命令前面(1字节)
- 命令包长度(1字节)
- 命令的 ID(1 个字节)
- 命令的控制部分(1字节)
- 数据字段(15字节)
- 校验(1字节)
例如,用于开灯的完整包是 "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"
我有一个非常棘手的问题。我将带有 iOS 设备的字节数组发送到工作正常的 ble 设备(led 灯)。 我有一份所有命令的文档,中文翻译得很差。 整个字节包是这样构建的:
- 命令前面(1字节)
- 命令包长度(1字节)
- 命令的 ID(1 个字节)
- 命令的控制部分(1字节)
- 数据字段(15字节)
- 校验(1字节)
例如,用于开灯的完整包是 "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"