Упаковывает данные в бинарную строку


(PHP 4, PHP 5)

packУпаковывает данные в бинарную строку

Описание

string pack ( string $format [, mixed $args [, mixed $... ]] )

Упаковывает заданные аргументы в бинарную строку согласно формату в параметре format.

Идея этой функции была заимствована из Perl и все коды форматирования работают также. Однако, есть некоторые отсутствующие коды форматирования, как, к примеру, код формата Perl "u".

Необходимо иметь ввиду, что отличие между знаковыми и беззнаковыми значениями влияет только на unpack() функцию, тогда как функция pack() дает одинаковый результат для знаковых и беззнаковых кодов формата.

Список параметров

format

Параметр format задается в виде строки и состоит из кодов формата и опционального аргумента повторения. Аргумент может быть целочисленным, либо * для повторения до конца введенных данных. Для a, A, h, H число повторений определяет то, сколько символов взято от одного аргумента данных, для @ - это абсолютная позиция для размещения следующих данных, для всего остального число повторений определяет как много аргументов данных было обработано и упаковано в результирующую бинарную строку.

Работающие на данный момент форматы:

Символы форматов функции pack()
Код Описание
a Строка (string) с NUL-заполнением
A Строка (string) со SPACE-заполнением
h Hex-строка (Hex string), с нижнего разряда
H Hex-строка (Hex string), с верхнего разряда
c знаковый символ (char)
C беззнаковый символ (char)
s знаковый short (всегда 16 бит, машинный байтовый порядок)
S беззнаковый short (всегда 16 бит, машинный байтовый порядок)
n беззнаковый short (всегда 16 бит, порядок big endian)
v беззнаковый short (всегда 16 бит, порядок little endian)
i знаковый integer (машинно-зависимый размер и порядок)
I беззнаковый integer (машинно-зависимый размер и порядок)
l знаковый long (всегда 32 бит, машинный порядок)
L беззнаковый long (всегда 32 бит, машинный порядок)
N беззнаковый long (всегда 32 бит, порядок big endian)
V беззнаковый long (всегда 32 бит, порядок little endian)
q signed long long (всегда 64 bit, машинный порядок)
Q беззнаковый long long (всегда 64 bit, машинный порядок)
J беззнаковый long long (всегда 64 bit, порядок big endian)
P беззнаковый long long (всегда 64 bit, порядок little endian)
f float (машинно-зависимые размер и прдставление)
d double (машинно-зависимые размер и прдставление)
x NUL байт
X Резервирование одного байта
Z Строка (string) с NUL-заполнением (добавлено в PHP 5.5)
@ NUL-заполнение до абсолютной позиции

args

Возвращаемые значения

Возвращает бинарную строку, содержащую данные.

Список изменений

Версия Описание
5.6.3 Добавлены коды "q", "Q", "J" и "P" для поддержки 64-bit чисел.
5.5.0 Добавлен код "Z", работающий аналогично "a" для совместимости с Perl.

Примеры

Пример #1 Пример использования pack()

<?php
$binarydata 
pack("nvc*"0x12340x56786566);
?>

Полученная бинарная строка длиной 6 байт будет содержать последовательность байтов 0x12, 0x34, 0x78, 0x56, 0x41, 0x42.

Примечания

Предостережение

Необходимо отметить, что PHP сохраняет значения типа integer как знаковые с машинно-зависимым размером (C тип long). Все числа, переданные как integer, но выходящие за границы этого типа будут сохранены с типом float. При упакове этих float как integer, они будут переданы с типом integer. Это может как совпадать, так и нет с заданным шаблоном.

Наиболее частым является случай, когда упаковываются беззнаковые числа типа integer. В системах, где integer имеет размер в 32 бита, число обычно передается по тому же шаблону, как если бы integer был беззнаковым (хотя, это зависит от определенных преобразований из знаковое в беззнаковое, согласно стандарту С). В системах, где тип integer имеет размер в 64 бита, тип float не имеет мантиссы, достаточной по размеру для хранения значения без потери точности. Если эти системы также имеют простой 64-битный С тип int (большинство UNIX систем не имеют), то единственным путем для использования формата I в верхнем разряде является создание отрицательных integer значений с тем же представлением как и в определенном беззнаковом значении.

Смотрите также

  • unpack() - Распаковывает данные из бинарной строки