Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Ruby > XOR two binary strings

Reply
Thread Tools

XOR two binary strings

 
 
Gary Chris
Guest
Posts: n/a
 
      01-12-2009
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
--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
 
 
 
Jan-Erik R.
Guest
Posts: n/a
 
      01-12-2009
Gary Chris 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_two
>
> Thanks

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.

 
Reply With Quote
 
 
 
 
Joel VanderWerf
Guest
Posts: n/a
 
      01-12-2009
Gary Chris 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_two
>
> Thanks


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

--
vjoel : Joel VanderWerf : path berkeley edu : 510 665 3407

 
Reply With Quote
 
Robert Klemme
Guest
Posts: n/a
 
      01-13-2009
On 12.01.2009 20:52, Joel VanderWerf wrote:
> Gary Chris 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_two
>>
>> Thanks

>
> 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


--
remember.guy do |as, often| as.you_can - without end
 
Reply With Quote
 
Brian Candler
Guest
Posts: n/a
 
      01-13-2009
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"
--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
Sandor Szcs
Guest
Posts: n/a
 
      01-20-2009

On 12.01.2009, at 20:27, Gary Chris 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" # =3D> "\000\001\001\000"


Hth. regards, Sandor Sz=FCcs
--




 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
XOR Binascii Hex Strings using the PyCrypto module yaipa Python 0 02-16-2007 07:03 PM
Logical XOR of strings Michael W. Ryder Ruby 9 05-31-2006 07:20 AM
Why can't I xor strings? dataangel Python 50 10-13-2004 07:10 PM
Re: Why can't I xor strings? Phil Frost Python 1 10-11-2004 07:24 AM
bitwise AND, OR, XOR, NOT for strings? David Garamond Ruby 3 02-25-2004 02:54 PM



Advertisments