[prev in list] [next in list] [prev in thread] [next in thread] 

List:       ruby-talk
Subject:    Re: How to do bitwise ops on a byte?
From:       Dossy <dossy () panoptic ! com>
Date:       2002-12-31 14:04:03
[Download RAW message or body]

On 2002.12.31, Bernard Miller <forbytext@yahoo.com> wrote:
> I can?t seem to find a way to do bitwise ops on a
> byte, at least using the standard library. [...]

I was just doing bitwise ops last night.  What are you trying
to do?

> As a side note, I find a lot of the unpack functions
> to be just weird. I don?t understand what ?B? and ?b?
> are good for. They extract bits but return an array
> with 1 element that is a string containing the
> characters ?1? and ?0?, but those are not really bits,
> and are not useful for bitwise operations. 

The "b" and "B" operators simply return string representations
in base 2.

123.chr.unpack("B8") # => ["01111011"]

Take the value 123 and return the 8-bit string representation of
it in binary, which is 01111011.

Alternatively:

sprintf "%8b", 123  # => "01111011"

> I love the design of ruby. Please don?t make me have
> to use C or Java just because I want to do some
> bitwise ops. It?s just a harmless codec I?m working on
> :-)   Actually I already did it in Java :-(

b = 123 # which we know is 01111011

# if we want to test for bit 4, we bitwise-and with 0x08 and
# test to make sure it doesn't equal 0:
if b & 0x08 != 0
    puts "bit 4 set"
end

# if we want to test that bit 3 is clear, we bitwise-and
# with 0x04 and make sure it equals 0:
if b & 0x04 == 0
    puts "bit 3 clear"
end

# If we want to now set bit 3, we bitwise-or the value 0x04:
b = b | 0x04

p b   # => 127, or "01111111" which is 01111011 with bit 3 now set.

-- Dossy

-- 
Dossy Shiobara                       mail: dossy@panoptic.com 
Panoptic Computer Network             web: http://www.panoptic.com/ 
  "He realized the fastest way to change is to laugh at your own
    folly -- then you can let go and quickly move on." (p. 70)

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic