fn xor_bytes(a: &[u8], b: &[u8]) -> Vec<u8> {
a.iter().zip(b.iter()).map(|(x, y)| x ^ y).collect()
}
fn print_bitset_array(label: &str, array: &[u8]) {
print!("{}: ", label);
for byte in array {
print!("{:08b} ", byte);
}
println!();
}
fn main() {
let a = b"Aragorn";
let b = b"Boromir";
let c = xor_bytes(a, b);
print_bitset_array("a", a);
print_bitset_array("b", b);
print_bitset_array("c", &c);
print!("c: ");
for byte in &c {
print!("{} ", byte);
}
println!();
println!("c as string: {:?}", String::from_utf8_lossy(&c));
}
/*
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
c as string: "\u{3}\u{1d}\u{13}\u{8}\u{2}\u{1b}\u{1c}"
*/