unpack

(PHP 4, PHP 5, PHP 7)

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

Описание

array unpack ( string $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);
print_r($array);
?>

Результат выполнения данного примера:

Array
(
    [chars] => 4
    [int] => 160
)

Пример #2 Пример использования unpack() с замещающим аргументом

<?php
$binarydata 
"\x04\x00\xa0\x00";
$array unpack("c2chars/nint"$binarydata);
print_r($array);
?>

Результат выполнения данного примера:

Array
(
    [chars1] => 4
    [chars2] => 0
    [int] => 40960
)

Примечания

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

Необходимо отметить, что PHP хранит значения как signed. Если распаковать large unsigned long и оно будет иметь тот же размер, что и хранимое PHP значение, то результатом будет отрицательное число, даже если было указано распаковывать как unsigned.

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

Если не обозначить элемент, то будут использованы числовые индексы начиная с 1. Если не обозначить более чем один элемент, то это значит, что некоторые данные будут перезаписаны, так как нумерация стартует с 1 для каждого такого элемента.

Пример #3 Пример использования unpack() с безымянными ключами

<?php
$binarydata 
"\x32\x42\x00\xa0";
$array unpack("c2/n"$binarydata);
var_dump($array);
?>

Результат выполнения данного примера:

array(2) {
  [1]=>
  int(160)
  [2]=>
  int(66)
}

Обратите внимание, что первое значение из спецификатора c перезаписывается первым значением из спецификатора n.

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

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