XOR两个字符串

时间:2011-05-23 12:13:26

标签: ruby

  

可能重复:
  Xor of string in ruby

我想在两个字符串之间进行XOR计算。

irb(main):011:0> a = 11110000
=> 11110000
irb(main):014:0> b = 10111100
=> 10111100
irb(main):015:0> a ^ b
=> 3395084

我想这样做:"hello" ^ "key"

2 个答案:

答案 0 :(得分:13)

class String
  def ^( other )
    b1 = self.unpack("U*")
    b2 = other.unpack("U*")
    longest = [b1.length,b2.length].max
    b1 = [0]*(longest-b1.length) + b1
    b2 = [0]*(longest-b2.length) + b2
    b1.zip(b2).map{ |a,b| a^b }.pack("U*")
  end
end

p "hello" ^ "key"
#=> "he\a\t\u0016"

如果这不是您想要的结果,那么您需要明确说明您希望如何执行计算,或者您期望得到什么结果。

答案 1 :(得分:1)

  1. 将两个字符串转换为字节数组(注意字符编码,不是所有内容都可以用ASCII表示)
  2. 用零填充较短的数组,以便它们的大小相同
  3. 对于从0到数组大小的n:使用secondarray [n]的XOR firstarray [n],可能将结果存储到结果数组
  4. 将结果字节数组转换回字符串