unpack - Распаковывает данные из бинарной строки
Вернуться к: Разные Функции
unpack
(PHP 4, PHP 5, PHP 7)
unpack — Распаковывает данные из бинарной строки
Описание
$format
, string $data
)
Распаковывает данные из бинарной строки в массив согласно заданному в
format
формату.
Распакованные данные хранятся в ассоциативном массиве. Для осуществления этого необходимо обозначить различные коды форматов и разделить их с помощью слеш /. Можно также передать замещающий аргумент, с помощью которого каждый ключ массива будет иметь порядковый номер после обозначенного имени ключа.
Список параметров
-
format
-
См. функцию pack() для разъяснения кодов форматов.
-
data
-
Упакованные данные.
Возвращаемые значения
Возвращает ассоциативный массив, содержащий распакованные элементы бинарной строки.
Список изменений
Версия | Описание |
---|---|
5.5.0 |
Для поддержания совместимости с Perl сделано следующее: Код "a" теперь сохраняет завершающие NULL байты. Код "A" теперь удаляет все завершающие ASCII пробельные символы (пробелы, табуляцию, переносы строк, возврат каретки, и NULL байты). Код "Z" добавлен для NULL-дополненными строками, и удаляет завершающие NULL байты. |
Примеры
Пример #1 Пример использования unpack()
<?php
$binarydata = "\x04\x00\xa0\x00";
$array = unpack("cchars/nint", $binarydata);
?>
Результирующий массив будет содержать записи "chars" со значением 4 и "int" с 160.
Пример #2 Пример использования unpack() с замещающим аргументом
<?php
$binarydata = "\x04\x00\xa0\x00";
$array = unpack("c2chars/nint", $binarydata);
?>
Результирующий массив будет содержать записи "chars1", "chars2" и "int".
Примечания
Необходимо отметить, что PHP хранит значения как signed. Если распаковать large unsigned long и оно будет иметь тот же размер, что и хранимое PHP значение, то результатом будет отрицательное число, даже если было указано распаковывать как unsigned.
Если не обозначить элемент, то используется пустая строка. Если не обозначить более чем один элемент, то это значит, что некоторые данные будут перезаписаны, как например в:
Пример #3 Пример использования unpack() с безымянными ключами
<?php
$binarydata = "\x32\x42\x00\xa0";
$array = unpack("c2/n", $binarydata);
var_dump($array);
?>
Результирующий массив будет содержать записи "1" со значением 160 и "2" с 66. Первое значение из спецификатора c будет перезаписано первым значением из спецификатора n.
Вернуться к: Разные Функции