如下:
/// CS校验和方法
/// 校验原理
/// 第一位到校验位之前的所有16进制数据相加,取最后两位
/// 如果和校验位相等,则校验通过;如果不相等,校验失败
/// 需要校验的数据格式:0xAA+0xA1+0xXXXX+CS(校验位)
func CS_CHECK_DATA(_ bytes:[UInt8]) ->Bool{
guard bytes.count == 7 && bytes[0] == 0xAA && bytes[1] == 0xA1 else {
return false;
}
var total = 0
for item in bytes[0...5] {
total += Int(item)
print(total)
}
let cs = bytes[6].hexString
let totalHex = String(total,radix: 16)
return totalHex.suffix(2) == cs
}
测试
let bytes:[UInt8] = [170, 161, 66, 14, 102, 102, 103]
print(CS_CHECK_DATA(bytes))
true
Program ended with exit code: 0
关于校验的数据格式0xAA+0xA1+0xXXXX+CS(校验位)
,这个只是我这里需要的数据格式,你们可以指定自己的数据格式,然后再去修改校验步骤,但是大体思路都是一样的。
网友评论