From: matz / zetabits.com (Yukihiro Matsumoto)
> |why not:
> |
> |fixnum[bit,len]    access a bitfield in number
> |bignum[bit,len]    access a bitfield in number
> 
> Do you mean 0xbabe[16,8] returns 0xba?
> Hmm, is this useful?  Or just for completeness?

Well actually, 0xbabe[8,8] returns 0xba.  The bits start counting at
zero and go up.  I design processors and write scripts that mess with
bit fields all the time.

desc[36,4] = DATA_SEGMENT

is alot easier to read than

desc &= ~((1<<40) - (1<<36))
desc |= DATA_SEGMENT<<36

In perl I can do this stuff with the vec() function, but that is
really a hack.  When I saw the fixnum[bit] descussion eariler this
week I felt that Ruby could be much simpler.

> 
> |fixnum[Range]      access a bitfield in number
> |bignum[Range]      access a bitfield in number
> 
> Same as above.  I agree with your friend.  Persuade me.
As I said, I see no reason for Range, but it was included for symmetry.

> 
> |While I am on the subject of bitfields where is another question.
> |Supose I read a series or raw 256 bit data chunks from a file into
> |Strings.  How can I transfer them to Bignum's so i can do bitwise ORs
> |and ANDs on them.  (I want to convert my CRC checksum generator for
> |CPU caches from perl to Ruby.)
> 
> def bits2num(str)
>   n = 0
>   str.each_byte do |c|
>     n <<= 8
>     n |= c
>   end
>   n
> end
> 
> 							matz.

Yes I can do it all manually, but shouldn't there be a pack/unpack
format or special method to do this directly?  Maybe not.  I can add
methods myself in my script.

In perl it is not needed because bitstrings are implimented with the
normal strings.  You can read data from a file, use vec() to read and
write bit fields, use '&' and '|' to do masks and then just write the
data.  In Ruby you have to move back and forth to Bignums.

-Wayne