次のように、pack に与えられた整数が範囲外の時に、RangeError になるかど
うかが一貫していないように思えるのですが、これは意図的でしょうか。

% ruby -e 'p [2**7].pack("c")'
"\200"
% ruby -e 'p [2**15].pack("s")'
"\000\200"
% ruby -e 'p [2**31].pack("i")'
-e:1:in `pack': bignum too big to convert into `long' (RangeError)
        from -e:1
% ruby -e 'p [2**31].pack("l")'
-e:1:in `pack': bignum too big to convert into `long' (RangeError)
        from -e:1
% ruby -e 'p [2**63].pack("q")'
"\000\000\000\000\000\000\000\200"

% ruby -e 'p [-2**7-1].pack("c")'
"\177"
% ruby -e 'p [-2**15-1].pack("s")'
"\377\177"
% ruby -e 'p [-2**31-1].pack("i")'
-e:1:in `pack': bignum too big to convert into `long' (RangeError)
        from -e:1
% ruby -e 'p [-2**31-1].pack("l")'
-e:1:in `pack': bignum too big to convert into `long' (RangeError)
        from -e:1
% ruby -e 'p [-2**63-1].pack("q")'
"\377\377\377\377\377\377\377\177"

% ruby -e 'p [2**8].pack("C")'
"\000"
% ruby -e 'p [2**16].pack("S")'
"\000\000"
% ruby -e 'p [2**32].pack("I")'
-e:1:in `pack': bignum too big to convert into `unsigned long' (RangeError)
        from -e:1
% ruby -e 'p [2**32].pack("L")'
-e:1:in `pack': bignum too big to convert into `unsigned long' (RangeError)
        from -e:1
% ruby -e 'p [2**64].pack("Q")'
-e:1:in `pack': bignum too big to convert into `quad int' (RangeError)
        from -e:1

% ruby -e 'p [-1].pack("C")'
"\377"
% ruby -e 'p [-1].pack("S")'
"\377\377"
% ruby -e 'p [-1].pack("I")'
"\377\377\377\377"
% ruby -e 'p [-1].pack("L")'
"\377\377\377\377"
% ruby -e 'p [-1].pack("Q")'
"\377\377\377\377\377\377\377\377"
-- 
[田中 哲][たなか あきら][Tanaka Akira]