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
。在原始代码中,这是为了屏蔽
+
的溢出,但使用
^
时,输出不能大于输入。