packПакетирование данных в двоичную строку.
Синтаксис :
string pack(string format [,mixed $args, ...]);
Функция
pack() упаковывает заданные аргументы в бинарную строку, которая затем и возвращается.
Формат параметров, а также их количество, задается при помощи строки
$format, которая
представляет собой набор однобуквенных спецификаторов форматирования - наподобие тех, которые
указываются в
sprintf(), но только без знака %. После
каждого спецификатора может стоять число, которое отмечает, сколько информации будет обработано
данным спецификатором. А именно, для форматов a,A,h и H число задает, какое количество символов
будет помещено в бинарную строку из тех, что находится в очередном параметре-строке при вызове
функции (то есть, определяет размер поля для вывода строки). В случае @ оно определяет абсолютную
позицию, в которую будут помещены следующие данные. Для всех остальных спецификаторов следующие
за ними числа задают количество аргументов, на которые распространяется действие данного
формата. Вместо числа можно указать *, в этом случае подразумевается, что спецификатор действует
на все оставшиеся данные.
Вот полный список спецификаторов формата:
a - строка, свободные места в поле заполняются символом с кодом 0;
A - строка, свободные места заполняются пробелами;
h - шестнадцатиричная строка, младшие разряды в начале;
H - шестнадцатиричная строка, старшие разряды в начале;
c - знаковый байт (символ);
C - беззнаковый байт;
s - знаковое короткое целое (16 битовб порядок байтов определяется архитектурой процессора);
S - беззнаковое короткое число;
n - беззнаковое целое (16 битов, старшие разряды в конце);
v - беззнаковое целое (16 битов, младшие разряды в конце);
i - знаковое целое (размер и порядок байтов определяется архитектурой);
I - беззнаковое целое;
l - знаковое длинное целое (32 бита, порядок знаков определяется архитектурой);
L - беззнаковое длинное целое;
N - беззнаковое длинное целое (32 бита, старшие разряды в конце);
V - беззнаковое целое (32 бита, младшие разряды в конце);
f - число с плавающей точкой (зависит от архитектуры);
d - число с плавающей точкой двойной точности (зависит от архитектуры);
x - символ с нулевым кодом;
X - возврат назад на 1 байт;
@ - заполнение нулевым кодом до заданной абсолютной позиции.
// Целое, целое, все остальное - сиволы
$bindata = pack("nvc*", 0x1234, 0x5678, 65, 66);
После выполнения приведенного кода в строке $bindata будет содержаться 6 байтов в такой
последовательности:
0x12, 0x34, 0x78, 0x56, 0x41, 0x42 (в шестнадцатиричной системе счисления).
unpackРаспаковывает данные из двоичной строки.
Синтаксис :
array unpack(string format, string data);
Распаковывает данные из двоичной строки в массив согласно формату. Возвращает массив, содержащий
распакованные элементы.
$array = unpack("c2chars/nint", $binarydata);
Возникающий в результате массив будет содержать "chars1", "chars2" и "int".