unpack
(PHP 4, PHP 5, PHP 7, PHP 8)
unpack — Unpack data from binary string
Description
The unpacked data is stored in an associative array. To
accomplish this you have to name the different format codes and
separate them by a slash /. If a repeater argument is present,
then each of the array keys will have a sequence number behind
the given name.
Changes were made to bring this function into line with Perl:
-
The "a" code now retains trailing NULL bytes.
-
The "A" code now strips all trailing ASCII whitespace (spaces, tabs,
newlines, carriage returns, and NULL bytes).
-
The "Z" code was added for NULL-padded strings, and removes trailing
NULL bytes.
Parameters
format
-
See pack() for an explanation of the format codes.
string
-
The packed data.
offset
-
The offset to begin unpacking from.
Return Values
Returns an associative array containing unpacked elements of binary
string, or false on failure.
Examples
Example #1 unpack() example
<?php
$binarydata = "\x04\x00\xa0\x00";
$array = unpack("cchars/nint", $binarydata);
print_r($array);
?>
The above example will output:
Array
(
[chars] => 4
[int] => 160
)
Example #2 unpack() example with a repeater
<?php
$binarydata = "\x04\x00\xa0\x00";
$array = unpack("c2chars/nint", $binarydata);
print_r($array);
?>
The above example will output:
Array
(
[chars1] => 4
[chars2] => 0
[int] => 40960
)
Notes
Caution
Note that PHP internally stores integral values as signed. If you
unpack a large unsigned long and it is of the same size as PHP
internally stored values the result will be a negative number
even though unsigned unpacking was specified.
Caution
If you do not name an element, numeric indices starting from 1 are used.
Be aware that if you have more than one unnamed element, some data is
overwritten because the numbering restarts from 1 for each element.
Example #3 unpack() example with unnamed keys
<?php
$binarydata = "\x32\x42\x00\xa0";
$array = unpack("c2/n", $binarydata);
var_dump($array);
?>
The above example will output:
array(2) {
[1]=>
int(160)
[2]=>
int(66)
}
Note that the
first value from the c specifier is
overwritten by the first value from the n
specifier.
See Also
- pack() - Pack data into binary string