object XORBytesDemo {
def xorBytes(a: Array[Byte], b: Array[Byte]): Array[Byte] = {
(a zip b).map { case (x, y) => (x ^ y).toByte }
}
def printBitsetArray(label: String, array: Array[Byte]): Unit = {
print(s"$label: ")
array.foreach { b =>
val binary = (b & 0xFF).toBinaryString.reverse.padTo(8, '0').reverse
print(s"$binary ")
}
println()
}
def main(args: Array[String]): Unit = {
val a = "Aragorn".getBytes("US-ASCII")
val b = "Boromir".getBytes("US-ASCII")
val c = xorBytes(a, b)
printBitsetArray("a", a)
printBitsetArray("b", b)
printBitsetArray("c", c)
print("c: ")
c.foreach(b => print(s"${b & 0xFF} "))
}
}
/*
run:
a: 01000001 01110010 01100001 01100111 01101111 01110010 01101110
b: 01000010 01101111 01110010 01101111 01101101 01101001 01110010
c: 00000011 00011101 00010011 00001000 00000010 00011011 00011100
c: 3 29 19 8 2 27 28
*/