namazu-ml(avocado)


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: I should have known how to use pack 'w' ;-)



古川です。

>> On Wed, 9 Dec 1998 00:49:29 +0900, Satoru Takabayashi <satoru@xxxxxxxxxxxxx> said:
  > ついさきほど pack 'w' の使い方を覚えました。これは整数を圧縮した形
  > で保存する機能で、Perl 5.004 から導入されています。今まで知らなかっ
  > たのが実に残念です。

  >   % perl -e 'print pack("w*",1,2,3,100,200,300,10000,20000,30000)' \
  >     | od -t x1
  >   0000000 01 02 03 64 81 48 82 2c ce 10 81 9c 20 81 ea 30
  >   0000020

これって、SMF の可変長形式と同じですね。これは使えそう。


ところで、もしも、「pack 'w' だけのために、5.004 以上が必要」という事態
になるようなことがあったら、それはちょっともったいないので、使ってやっ
てください。

sub packw{
    my($x) = @_;
    my $ret = chr($x & 0x7f);
    $ret = chr(0x80 | ($x & 0x7f)) . $ret while $x >>= 7;
    $ret;
}


  > ちなみに、 pack 'w' の使い方は The Perl Journal に載っていた
  >   * Information Retrieval and pack 'w'
  >     by Ulrich Pfeifer
  > の記事を読んで覚えました。freeWAIS-sf + SFgate の開発者が転置イン

使いかたについてなのですが、データを読むときには、どうするのでしょう?
1 バイトづつ読んで bit 7 を見ながら長さを判断するのでしょうか?それとも、
5 バイト読んでからいらないのを捨てる、とか

# きっと前者を便利にやるような方法が用意されているのでしょうね。

-- 

                                        ヤマハ(株)ピアノプレーヤ設計課
                                                              古川 令
                                             furukawa@xxxxxxxxxxxxxxxx