From: Tanaka Akira Date: 2004-01-21T15:20:30+09:00 Subject: [ruby-dev:22654] overflow when pack integers 次のように、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]