Mark Hubbart
11/19/2004 4:11:00 AM
On Fri, 19 Nov 2004 08:05:21 +0900, Joel VanderWerf
<vjoel@path.berkeley.edu> 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