String.unpack endianess issue?

M

Matthew Moss

In irb 0.9 (ruby 1.8.2) in cygwin/WindowsXP:
a =3D [0, 0, 0, 6] =3D> [0, 0, 0, 6]
x =3D a.pack("C*") =3D> "\000\000\000\006"
x.unpack("I") =3D> [100663296]
x.unpack("V")
=3D> [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...
 
J

Joel VanderWerf

Matthew said:
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.
 
M

Matthew Moss

irb(main):001:0> a =3D [0, 0, 0, 6]
=3D> [0, 0, 0, 6]
irb(main):002:0> x =3D a.pack("C*")
=3D> "\000\000\000\006"
irb(main):003:0> x.unpack "N"
=3D> [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...
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,744
Messages
2,569,483
Members
44,902
Latest member
Elena68X5

Latest Threads

Top