Joel VanderWerf
1/26/2006 6:44:00 AM
Matthew Moss wrote:
> In irb 0.9 (ruby 1.8.2) in cygwin/WindowsXP:
>
>> a = [0, 0, 0, 6]
> => [0, 0, 0, 6]
>> x = a.pack("C*")
> => "\000\000\000\006"
>> x.unpack("I")
> => [100663296]
>> x.unpack("V")
> => [100663296]
>
>
> I would have though that at least one of "I" or "V" in the unpack call
> would have given me the correct answer, 6. I'm reading this data out
> of a binary file, stored in big-endian, but neither handles this.
>
> I managed to get the right answer by doing:
>
> x.unpack("C*").reverse.pack("C*").unpack("I")
>
> But that seems rather silly. So I guess I'm asking:
>
> 1. Is unpack broken, or is there a big-endian option I missed?
> 2. Is there a more generic module/library for reading binary files?
> 3. Is there an existing modules/lib for reading MIDI files?
>
> thanks...
>
irb(main):001:0> a = [0, 0, 0, 6]
=> [0, 0, 0, 6]
irb(main):002:0> x = a.pack("C*")
=> "\000\000\000\006"
irb(main):003:0> x.unpack "N"
=> [6]
For convenience, I wrote a set of object-oriented wrappers around
pack/unpack. See bit-struct on raa.
--
vjoel : Joel VanderWerf : path berkeley edu : 510 665 3407