我正在尝试对 ruby 中的两个键字符串执行按位异或:
键1:0123456789abcdeffedcba9876543210
键2:00000000000000000000000000000000
有人可以告诉我如何做到这一点,谢谢。
我正在尝试对 ruby 中的两个键字符串执行按位异或:
键1:0123456789abcdeffedcba9876543210
键2:00000000000000000000000000000000
有人可以告诉我如何做到这一点,谢谢。
有人可以告诉我该怎么做吗?
Ruby 中的 XOR 运算符是^
. 它可以用作按位和布尔值,具体取决于它的参数(请记住,它^
是一个运算符和一个方法.^(x)
)。在默认类String
中 is 不存在,但您可以轻松地自己实现它:
class String
# converts to array of chars
def to_a
ret = []
self.each_char do |c|
ret.push c
end
return ret
end
# given two numeric strings,
# returns the bitwise xor string
def ^(s)
aa = self.to_a
ab = s.to_a
lc = (aa.count < ab.count) ? aa.count : ab.count
ret = ""
lc.times do |i|
x = aa[i].to_i ^ ab[i].to_i
ret = ret + x.to_s
end
return ret
end
end
这只是一个示例,尚未经过测试。
如果我要在执行按位异或之前将每个字节转换为二进制。我该怎么做?
好吧,你想看看String#bytes或String#each_byte并用这些方法来实现上面的代码。