Arrays 如何在swift 4中获取字节[UInt8]数组中的校验和?
我有字节数组,我需要得到校验和:Arrays 如何在swift 4中获取字节[UInt8]数组中的校验和?,arrays,swift,Arrays,Swift,我有字节数组,我需要得到校验和: let bytes : [UInt8] = [0xC4, 0x03, 0x01, 0x09, 0x03] 我尝试了此代码,但它对我没有帮助: let result = 256 - dataByte.checksum extension Data { var checksum: Int { return self.map { Int($0) }.reduce(0, +) & 0xff } } 我的开发人员朋友尝试在Kotlin上获取校验和,
let bytes : [UInt8] = [0xC4, 0x03, 0x01, 0x09, 0x03]
我尝试了此代码,但它对我没有帮助:
let result = 256 - dataByte.checksum
extension Data {
var checksum: Int {
return self.map { Int($0) }.reduce(0, +) & 0xff
}
}
我的开发人员朋友尝试在Kotlin上获取校验和,如下所示:
var checksum = 0
for (i in 0..lastIndex) {
checksum = checksum xor this[i].toInt()
}
return checksum
他得到了这个结果0x0B,我只需要在swift 4上得到相同的结果。这就是你如何
XOR
数组中的所有值:
let bytes: [UInt8] = [0xC4, 0x03, 0x01, 0x09, 0x03]
let checksum = bytes.reduce(0, ^)
print(checksum) // 204, which equals 0xCC
正如Martin R所提到的,结果是0xCC,而不是0x0B。对于初学者,XOR是
^
,而不是+
。但是[0xC4,0x03,0x01,0x09,0x03]中所有字节的XOR是0xCC–我不清楚如何获得结果0x0B。在这种情况下,不需要&0xFF
。在原始代码中,这是为了屏蔽+
的溢出,但使用^
时,输出不能大于输入。