Как сделать операцию XOR между двумя шестнадцатеричными строками?

У меня есть две шестнадцатеричные строки. Мне нужно сделать XOR операция между ними.

Мои гекса строки, как,

 a = "1A6F2D31567C80644A5BEF2D50B986B";
 b = "EF737F481FC7CDAE7C8B40837C80644";

Как сделать операцию XOR между ними? Можете ли вы дать какое-то руководство для этого?

3 ответа

Решение

Это будет работать для любой базы:

>> (a.to_i(16) ^ b.to_i(16)).to_s(16) 
=> "f51c527949bb4dca36d0afae2c39e2f"

Но вы можете использовать String#hex для шестнадцатеричных строк.

a = "1A6F2D31567C80644A5BEF2D50B986B"
b = "EF737F481FC7CDAE7C8B40837C80644"
a.hex ^ b.hex
#or (a.hex ^ b.hex).to_s(16)

Вы специально не спрашивали, но вы могли бы хотеть, чтобы выходная строка имела ту же длину, что и входные строки, заполнив начальные нули. Итак, опираясь на плавный ответ Стинслага (и корректируя входные значения, чтобы проиллюстрировать потенциальную проблему):

a = "14ef"
b = "1ca3"
(a.hex ^ b.hex).to_s(16)
# "84c"
(a.hex ^ b.hex).to_s(16).rjust(a.length, '0')
# "084c"
Другие вопросы по тегам