From: Mark Hubbart Date: 2004-11-19T13:10:47+09:00 Subject: Re: Extracting ints from a unsigned long On Fri, 19 Nov 2004 08:05:21 +0900, Joel VanderWerf wrote: > Joe Van Dyk wrote: > > > > I have a bunch of binary data consisting of 4 ints stored inside an unsigned > > long. > > > > Here's psuedo C code to extract out the ints: > > > > // data is a FILE pointer to the file > > unsigned long temp; > > fread(temp, sizeof(temp), 1, data); > > int first = temp >> 24; > > int second = temp << 8 >> 24; > > int third = temp << 16 >> 24; > > int fourth = temp << 24 >> 24; > > > > > > I'm trying to do the same thing in Ruby, but I'm having difficulties with > > the bitshifting. Any ideas? Would it make since to inline C code in Ruby > > for this? > > irb(main):003:0> [1,2,3,4].pack "C*" > => "\001\002\003\004" > irb(main):004:0> [1,2,3,4].pack("C*").unpack("C*") > => [1, 2, 3, 4] Or, starting with the unsigned long; # pack('N') => network byte order; # pack('V') => little-endian byte order # pack('L') => native byte order [123456789].pack('N').unpack('C*') ==>[7, 91, 205, 21] ri unpack for more. hth, Mark