2011-05-23 71 views
3

可能重複:
Xor of string in rubyXOR兩個字符串

我想提出兩個字符串之間的XOR運算。

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

我想做到這一點:"hello"^"key"

+0

看看[紅寶石字符串的異或](http://stackoverflow.com/q/348991/49186) – dexter 2011-05-23 12:17:39

+3

你必須學會​​如何使用SO。你一直在發送很多基本相同的問題(XOR和更多的XOR),但是你不會評論答案,你不會選擇它們,你也不會提供任何反饋。有什麼問題?例如,這裏(http://stackoverflow.com/questions/5961720/how-to-calculate-xor-with-offset),你有這個問題幾乎解決了,只是得到每個字符串的字節,而不是使用整數0/1。 – tokland 2011-05-23 12:34:12

+2

這不是鏈接問題的重複([348991](http://stackoverflow.com/questions/348991/xor-of-string-in-ruby)),而是另一個([5961720](http: /stackoverflow.com/questions/5961720/how-to-calculate-xor-with-offset)) – finnw 2011-05-24 00:23:46

回答

1
  1. 轉換兩個字符串轉換爲字節數組(請注意使用的字符編碼,而不是什麼都可以用ASCII表示)
  2. 墊短陣與零相同,因此它們都是相同的大小
  3. 對於n從0到數組大小:XOR firstarray [n]與secondarray [n],可能將結果存儲到結果數組
  4. 結果轉換成字節數組轉換回字符串
12
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" 

如果這不是你想要的結果,那麼你需要明確你想要如何進行計算,或者是什麼導致你的期望。