import Foundation
func xorBytes(_ a: [UInt8], _ b: [UInt8]) -> [UInt8] {
return zip(a, b).map { $0 ^ $1 }
}
func printBitsetArray(label: String, array: [UInt8]) {
print("\(label): ", terminator: "")
for byte in array {
let bits = String(byte, radix: 2).padding(toLength: 8, withPad: "0", startingAt: 0)
print(bits, terminator: " ")
}
print()
}
let a = Array("Aragorn".utf8)
let b = Array("Boromir".utf8)
let c = xorBytes(a, b)
printBitsetArray(label: "a", array: a)
printBitsetArray(label: "b", array: b)
printBitsetArray(label: "c", array: c)
print("c: ", terminator: "")
for byte in c {
print(byte, terminator: " ")
}
/*
run:
a: 10000010 11100100 11000010 11001110 11011110 11100100 11011100
b: 10000100 11011110 11100100 11011110 11011010 11010010 11100100
c: 11000000 11101000 10011000 10000000 10000000 11011000 11100000
c: 3 29 19 8 2 27 28
*/