如何在Swift 4中的字节[UInt8]数组中获取校验和?

时间:2019-02-26 15:00:52

标签: 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上获取校验和,如下所示:

var checksum = 0
    for (i in 0..lastIndex) {
        checksum = checksum xor this[i].toInt()
    }
    return checksum

他得到了0x0B的结果,而我仅在swift 4上才需要相同的结果。

1 个答案:

答案 0 :(得分:0)

这就是您XOR数组中所有值的方式:

let bytes: [UInt8] = [0xC4, 0x03, 0x01, 0x09, 0x03]
let checksum = bytes.reduce(0, ^)
print(checksum) // 204, which equals 0xCC

如Martin R所述,结果为0xCC,而不是0x0B。