0
我有一個相當棘手的問題。我用iOS設備發送一個字節數組到一個可以正常工作的可充電設備(led燈)。 我有一個所有命令的文檔,這些文檔從中文翻譯得非常差。 整個字節包是建立這樣的:字節的快速校驗和
- 命令(1個字節)的前
- 命令包(1個字節)的長度
- 命令的ID(1個字節)
- 命令的控制部(1個字節)
- 數據字段(15個字節)
- 檢查(1個字節)
例如,用於開燈的完整套件是「A1080100FFFFFF59」 到目前爲止,一切都很清楚。我唯一遇到的問題是文檔中最後一個字節或它是如何被調用的:「檢查」。 文件只是說:「校驗碼指令:校驗碼=(0-全字節期望字節之和)」。 在上面的示例中,「59」將是校驗和。但不管我如何計算它,我都不會去「59」。
我發現這個可愛的小幫手
public extension Data {
public func checkSum() -> Int {
return self.map { Int($0) }.reduce(0, +) & 0xff
}
}
但我沒有得到任何命令的權利「檢查」。
也許有人有一個想法如何計算?
這是有道理的。非常感謝。 – Patricks
是的,文件說「0 - 全字節中字節的總和」。在8位無符號位算術中,'0&'-x'與'256& - x'相同因爲實際上你需要一個'UInt8',所以你可以簡化校驗和計算,例如:return 0& - self.reduce(0 ,&+)' – JeremyP