Unpack problems

Hi! I'm having some troubles with unpack that I can't seem to figure
out. My test program looks like this:

foo = "\000\000\022\227"
puts foo.unpack("N")

On linux (ruby 1.8.3 (2005-09-21) [i386-linux]), the test program gives
the following output:

4759

Which is what I expect. However, on OS X (ruby 1.8.2 (2004-12-25)
[powerpc-darwin8.0]), I get the following output:

2534539264

I can't figure out if I'm doing something stupid, or if there is a
problem with ruby. Thanks for the help!

--Aaron

This looks like an endianness issue. Check out what happens when you
reverse it:
puts foo.reverse.unpack("N")

"N" indicates Network byte order (big-endian), but it sounds like you
may want to use system byte-order, which is "L"
I don't have a Mac to test with, unfortunately. Check out page 603 in
the Pickaxe book, if you have it.

--Wilson.

···

On 12/9/05, Aaron Patterson <aaron_patterson@speakeasy.net> wrote:

Hi! I'm having some troubles with unpack that I can't seem to figure
out. My test program looks like this:

foo = "\000\000\022\227"
puts foo.unpack("N")

On linux (ruby 1.8.3 (2005-09-21) [i386-linux]), the test program gives
the following output:

4759

Which is what I expect. However, on OS X (ruby 1.8.2 (2004-12-25)
[powerpc-darwin8.0]), I get the following output:

2534539264

I can't figure out if I'm doing something stupid, or if there is a
problem with ruby. Thanks for the help!

--Aaron

Tiger's Ruby's pack/unpack have reversed endianness. You'll have to build your own Ruby for it to work correctly.

···

On Dec 9, 2005, at 1:17 PM, Aaron Patterson wrote:

Hi! I'm having some troubles with unpack that I can't seem to figure
out. My test program looks like this:

foo = "\000\000\022\227"
puts foo.unpack("N")

On linux (ruby 1.8.3 (2005-09-21) [i386-linux]), the test program gives
the following output:

4759

Which is what I expect. However, on OS X (ruby 1.8.2 (2004-12-25)
[powerpc-darwin8.0]), I get the following output:

2534539264

I can't figure out if I'm doing something stupid, or if there is a
problem with ruby. Thanks for the help!

--
Eric Hodel - drbrain@segment7.net - http://segment7.net
This implementation is HODEL-HASH-9600 compliant

http://trackmap.robotcoop.com

Looks like it is an endianness issue. Thank you for the help!

--Aaron

···

On Sat, Dec 10, 2005 at 06:30:33AM +0900, Wilson Bilkovich wrote:

This looks like an endianness issue. Check out what happens when you
reverse it:
puts foo.reverse.unpack("N")

"N" indicates Network byte order (big-endian), but it sounds like you
may want to use system byte-order, which is "L"
I don't have a Mac to test with, unfortunately. Check out page 603 in
the Pickaxe book, if you have it.

--Wilson.