如何在两个十六进制字符串之间执行异或操作?

7

我有两个十六进制字符串,需要对它们执行XOR操作。

我的十六进制字符串如下:

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

如何执行它们之间的异或操作?你能给出一些指导吗?

输出是整数还是另一个字符串? - tokland
3个回答

12
那对于任何进制都适用:
>> (a.to_i(16) ^ b.to_i(16)).to_s(16) 
=> "f51c527949bb4dca36d0afae2c39e2f"

但是你可以使用String#hex函数来处理十六进制字符串。


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

2
您没有明确要求,但您可能希望输出字符串与输入字符串具有相同的长度,通过在前面填充零。因此,在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"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接