ruby pack unexpected results

I have two hex values and expect back the value “3007”

What pack does is take the array of hexes and formats them into a string (if ASCII representation, then ASCII character, otherwise the raw hex as string). Then I take the string of hexes and unpack them, that is, get the unsigned int representation of those bytes:

[0xBF, 0xB].pack(‘C*’).unpack(‘I’)[0]

So I expect back 3007, but the above produces nil.

This is what I want to achieve:

[0xBF, 0xB].reverse.inject { |s,v| s * 256 + v }

=> 3007

But I want to use unpack instead of inject.

Do the operation one step at a time in irb and you will see where it goes wrong.

Colin

I have two hex values and expect back the value "3007"

What pack does is take the array of hexes and formats them into a string (if ASCII representation, then ASCII character, otherwise the raw hex as string). Then I take the string of hexes and unpack them, that is, get the unsigned int representation of those bytes: [0xBF, 0xB].pack('C*').unpack('I')[0]

So I expect back 3007, but the above produces nil.

Do the operation one step at a time in irb and you will see where it goes wrong.

Hint: unpack('I') appears to expect four bytes.

Colin