Swift 3中两位十六进制字符串的按位异或

时间:2017-09-11 13:24:29

标签: arrays swift3 xor

我想从前两个数组的字符串得到Bitwise XOR值,然后第一个二的结果应该与数组的第三个元素进行异或,结果应该与数组的第四个元素进行异或,依此类推..

数组为["a2", "09", "00", "00", "00", "01", "00", "00", "00", "10", "00"]

最终答案也将是bitWise XOR值

请帮忙。

提前致谢

2 个答案:

答案 0 :(得分:1)

您可以使用Int(String, radix: 16)将十六进制数字转换为Int。使用Int的初始化程序,您可以使用flatMap将十六进制字符串转换为整数。

然后你可以使用reduce遍历数组并获取当前结果的XOR值(使用内置的^运算符)和数组的下一个元素。

let hexStrings = ["a2", "09", "00", "00", "00", "01", "00", "00", "00", "10", "00"]
let numbers = hexStrings.flatMap{Int($0, radix: 16)}
numbers
let xor = numbers.reduce(0, {$0^$1}) //186 as it should be

如果您需要十六进制的最终值,可以使用String(Int, radix:16)

let xorHex = String(xor, radix: 16) // "ba"

答案 1 :(得分:0)

您可以使用以下代码获取结果

let numbers = pairs.flatMap{Int($0, radix: 16)}

let xor = numbers.reduce(0, {$0^$1})

let result = String(format: "%02x", xor)