From: Yui NARUSE Date: 2010-10-14T15:46:44+09:00 Subject: [ruby-dev:42376] [Ruby 1.9-Feature#3947][Open] Array#packのにエンディアン指定修飾子を追加 Feature #3947: Array#packのにエンディアン指定修飾子を追加 http://redmine.ruby-lang.org/issues/show/3947 起票者: Yui NARUSE ステータス: Open, 優先度: Normal Target version: 1.9.3 Ruby の伏魔殿 Array#pack ですが、機種依存な部分をいじる際にはしばしば強力かつ唯一の手段になる事があります。 具体的には RubySpec 書く時とか。 さて、pack のようにバイト列を扱う場合、しばしば問題になるのがエンディアンです。 ここで、Ruby の Array#pack は 16bit/32bit 固定の整数に対してはエンディアン固定の n/N/v/V 指定子を用意していますが、short/int/long/long long のように、 マシン依存の型をエンディアン固定で pack する手段を提供していません。 というわけで、これが欲しいです。 ここで問題になるのがどのように指定するかなのですが、pack のネタ元である Perl さんでは既に 修飾子を この目的のために提供しています。 http://perldoc.perl.org/functions/pack.html というわけで、これに追従するのがよろしいと思います。 > sSiIlLqQ Force big-endian byte-order on the type. jJfFdDpP (The "big end" touches the construct.) < sSiIlLqQ Force little-endian byte-order on the type. jJfFdDpP (The "little end" touches the construct.) なお、「 とかきもい」という意見もあるかとは思いますが、pack は機種依存とかに触るきもいメソッドなので、 そこを気にするよりは長い物に巻かれておいた方が無難ではないかなと思うため、 修飾子がベストかと思います。 ---------------------------------------- http://redmine.ruby-lang.org