Forum: Ruby String.unpack endianess issue?

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
81d609425e306219d54d793a0ad98bce?d=identicon&s=25 Matthew Moss (Guest)
on 2006-01-26 07:23
(Received via mailing list)
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...
47b1910084592eb77a032bc7d8d1a84e?d=identicon&s=25 Joel VanderWerf (Guest)
on 2006-01-26 07:44
(Received via mailing list)
Matthew Moss wrote:
>
>
> 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.
81d609425e306219d54d793a0ad98bce?d=identicon&s=25 Matthew Moss (Guest)
on 2006-01-26 15:35
(Received via mailing list)
> 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.

Ah, thanks.  I noticed the "V" as I searched for "endian" in the docs,
but I missed the "N". Should have searched on "byte order".  Thanks...
This topic is locked and can not be replied to.