unpack
(PHP 4, PHP 5, PHP 7, PHP 8)
unpack — Unpack data from binary string
说明
$format
, string $string
, int $offset
= 0
) : array|false
Unpacks from a binary string into an array according to the given
format
.
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.
参数
-
format
-
See pack() for an explanation of the format codes.
-
string
-
The packed data.
-
offset
-
The offset to begin unpacking from.
返回值
Returns an associative array containing unpacked elements of binary
string, 或者在失败时返回 false
.
更新日志
版本 | 说明 |
---|---|
7.2.0 | float and double types supports both Big Endian and Little Endian. |
7.1.0 |
The optional offset has been added.
|
范例
示例 #1 unpack() example
<?php
$binarydata = "\x04\x00\xa0\x00";
$array = unpack("cchars/nint", $binarydata);
print_r($array);
?>
以上例程会输出:
Array ( [chars] => 4 [int] => 160 )
示例 #2 unpack() example with a repeater
<?php
$binarydata = "\x04\x00\xa0\x00";
$array = unpack("c2chars/nint", $binarydata);
print_r($array);
?>
以上例程会输出:
Array ( [chars1] => 4 [chars2] => 0 [int] => 40960 )
注释
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.
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.
示例 #3 unpack() example with unnamed keys
<?php
$binarydata = "\x32\x42\x00\xa0";
$array = unpack("c2/n", $binarydata);
var_dump($array);
?>
以上例程会输出:
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.