7

我有两个十六进制字符串。我需要XOR在它们之间进行操作。

我的六弦琴就像,

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

如何进行它们之间的异或运算?你能给出一些指导方针吗?

4

3 回答 3

12

这适用于任何基础:

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

但是您可以将String#hex用于十六进制字符串。

于 2012-09-08T14:35:03.987 回答
9
a = "1A6F2D31567C80644A5BEF2D50B986B"
b = "EF737F481FC7CDAE7C8B40837C80644"
a.hex ^ b.hex
#or (a.hex ^ b.hex).to_s(16)
于 2012-09-08T14:56:32.887 回答
2

您没有特别询问,但您可能希望输出 String 的长度与输入 Strings 的长度相同,方法是填充前导零。因此,以 steenslag 的巧妙答案为基础(并调整输入值以说明潜在问题):

a = "14ef"
b = "1ca3"
(a.hex ^ b.hex).to_s(16)
# "84c"
(a.hex ^ b.hex).to_s(16).rjust(a.length, '0')
# "084c"
于 2013-11-21T22:00:33.273 回答