web-dev-qa-db-ja.com

PHPのpack()関数について誰かに説明してもらえますか?

PHPのpack()関数について詳しく知りたい: https://secure.php.net/manual/en/function.pack.php

データをバイナリにパックすることは知っていますが、それらすべてが何であるかはわかりませんv V n N c Cつまり、どのフォーマットをいつ使用するかについて実際的なデモンストレーションをしてくれるような人がいるのではないかと思っていました。

私の意見では、変更のためのオンラインドキュメントには情報が不足しています。

41
Tower

これらは、パックするデータをバイナリ形式で表現する方法を表します。

そう

$bin = pack("v", 1); => 0000000000000001(16ビット)

どこ

$bin = pack("V", 1) => 00000000000000000000000000000001(32ビット)

バイナリデータでデータをどのように表現するかをパックに指示します。以下のコードはこれを示しています。データをパックしたときとは異なる形式で解凍できることに注意してください。

<?php

$bin = pack("S", 65535);
$ray = unpack("S", $bin);
echo "UNSIGNED SHORT VAL = ", $ray[1], "\n";

$bin = pack("S", 65536);
$ray = unpack("S", $bin);
echo "OVERFLOW USHORT VAL = ", $ray[1], "\n";

$bin = pack("V", 65536);
$ray = unpack("V", $bin);
echo "SAME AS ABOVE BUT WITH ULONG VAL = ", $ray[1], "\n";
?>
25
RC.

Packのphpドキュメントに記載されているように、この関数はPerlのpack関数から借用されています。

Perlのパックに関するドキュメント 、特にページの一番下にある例のセクションを見てください。 PHPのパックはすべての形式を実装しているわけではありませんが、関数に関するPerlのドキュメントは、例を提供し、各形式を説明する上でより良い仕事をします。

11
racerror