Может кто-нибудь объяснить мне функцию pack () в PHP? - PullRequest
40 голосов
/ 12 июня 2009

Я хотел бы узнать больше о функции pack() в PHP: https://secure.php.net/manual/en/function.pack.php

Я знаю, что это упаковывает данные в двоичный файл, но я не уверен, что означают все эти v V n N c C, и мне было интересно, может ли кто-нибудь быть настолько любезным, чтобы дать мне практическую демонстрацию, когда использовать какие форматы?

Онлайн-документация, для разнообразия, на мой взгляд, нехватка информации.

Ответы [ 2 ]

25 голосов
/ 12 июня 2009

Они показывают, как вы хотите, чтобы данные, которые вы упаковываете, были представлены в двоичном формате:

так

$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";
?>
11 голосов
/ 12 июня 2009

Как отмечено в документации php для pack, функция заимствована из функции pack в Perl.

Взгляните на документацию Perl для пакета , в частности раздел с примерами в самом низу страницы. Пакет PHP не поддерживает все форматы, но документация по Perl для этой функции лучше обеспечивает примеры и объяснение каждого формата.

...