Howdy,
I am having difficulty finding how to XOR 2 binary strings.
Is there a builtin function for this ?
Something like
return string_one ^ string_two
Thanks
Howdy,
I am having difficulty finding how to XOR 2 binary strings.
Is there a builtin function for this ?
Something like
return string_one ^ string_two
Thanks
Gary C. schrieb:
Howdy,
I am having difficulty finding how to XOR 2 binary strings.
Is there a builtin function for this ?
Something like
return string_one ^ string_twoThanks
what do you mean by binary Strings?
“011101”?
use
Integer(“0b#{binarystring}”)
to convert it to an integer, then use the XOR and later use
String#to_s(2)
to convert it back again.
Gary C. wrote:
Howdy,
I am having difficulty finding how to XOR 2 binary strings.
Is there a builtin function for this ?
Something like
return string_one ^ string_twoThanks
All I can think of at the moment:
a = [0b00000001, 0b00001000].pack(“C*”)
b = [0b10000001, 0b01000000].pack(“C*”)
c = a.unpack(“C*”).zip(b.unpack(“C*”))
c = c.map {|x,y| x^y}
c = c.pack(“C*”)
p c
On 12.01.2009 20:52, Joel VanderWerf wrote:
All I can think of at the moment:
a = [0b00000001, 0b00001000].pack(“C*”)
b = [0b10000001, 0b01000000].pack(“C*”)c = a.unpack(“C*”).zip(b.unpack(“C*”))
c = c.map {|x,y| x^y}
c = c.pack(“C*”)
p c
There’s also
irb(main):002:0> (“00000001”.to_i(2) ^ “0110”.to_i(2)).to_s(2)
=> “111”
Kind regards
robert
On 12.01.2009, at 20:27, Gary C. wrote:
am having difficulty finding how to XOR 2 binary strings.
Is there a builtin function for this ?
Something like
return string_one ^ string_two
There is also facets:
irb> require ‘facets/string/xor’
irb> “\000\000\001\001” ^ “\000\001\000\001” # => “\000\001\001\000”
Hth. regards, Sandor
Szücs
I’m not sure if “binary string” meant a string of the form “000101…”,
or if it meant two strings treated as arrays of bytes.
If the latter, then
irb(main):001:0> require ‘enumerator’
=> true
irb(main):002:0> s1 = “abc”.to_enum(:each_byte)
=> #Enumerable::Enumerator:0xb7cc85dc
irb(main):003:0> s2 = “\x02\x04\x06”.to_enum(:each_byte)
=> #Enumerable::Enumerator:0xb7cc02c4
irb(main):004:0> s1.zip(s2).map{ |x,y| (x^y).chr }.join
=> “cfe”
ruby 1.9 lets you shorten this to
irb(main):001:0> “abc”.bytes.zip("\x02\x04\x06".bytes).map { |x,y|
(x^y).chr }.join
=> “cfe”
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.
Sponsor our Newsletter | Privacy Policy | Terms of Service | Remote Ruby Jobs