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