- ベストアンサー
PerlのソースをPHPに移植中なのですが...
- PerlのソースコードをPHPに移植しようとしていますが、unpack()関数の使い方がわからず困っています。
- "nna6"というパラメータについても分かりません。PHPでもunpack()関数があるようですが、挙動が異なるようです。
- unpack("nna6", $buf)の意味と、PHPでの書き方について教えていただきたいです。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
unpackは第1引数で指定された書式(nna6)に合わせて、第2引数のデータ(バイナリ)を分解するための関数ですね。 perlのサイトによると、 > a An ascii string, will be null padded. > n A short in "network" (big-endian) order. ですから、たとえば$bufに、 0x11 0x22 0x33 0x44 0x55 0x56 0x57 0x58 という並びで、データが入っているとすると、 > ( $marker,$size,$ext) = unpack("nna6",$buf); の結果は、 $marker = 0x1122; (n:short型(16bit) ビックエンディアン) $size = 0x3344; (n:short型(16bit) ビックエンディアン) $ext = "UVWX\0\0"; (a:文字列) となります。 a6の場合$extに入る文字列は最大6文字となりますが、それに満たない場合はNULL(\0)が追加されています。 0x55 0x56 0x57 0x58はアスキーコードでそれぞれU V W Xになります。 http://www.perl.com/doc/manual/html/pod/perlfunc/pack.html http://flex.ee.uec.ac.jp/texi/perl/perl_34.html http://flex.ee.uec.ac.jp/texi/perl/perl_35.html PHPなら、 $array = unpack("nmarker/nsize/a6ext",$buf); で、 $array["marker"] = 0x1122; $array["size"] = 0x3344; $array["ext"] = "UVWX\0\0"; ぐらいになるのかな? 触ったことがないのでよくわかりません。 返り値が連想配列になっていたり、'/'で区切る必要があったりして、微妙に違うようです。 http://search.net-newbie.com/php/function.pack.html http://search.net-newbie.com/php/function.unpack.html
お礼
なるほどです n:short型(16bit) ビックエンディアン a:文字列 ということでなんだか概要が掴めた気がします ありがとうございます 早速試してみます!