array ( 0 => 'index.php', 1 => 'PHP Manual', ), 'head' => array ( 0 => 'UTF-8', 1 => 'pt_BR', ), 'this' => array ( 0 => 'function.unpack.php', 1 => 'unpack', ), 'up' => array ( 0 => 'ref.misc.php', 1 => 'Misc. Funções', ), 'prev' => array ( 0 => 'function.uniqid.php', 1 => 'uniqid', ), 'next' => array ( 0 => 'function.usleep.php', 1 => 'usleep', ), 'alternatives' => array ( ), 'source' => array ( 'lang' => 'pt_BR', 'path' => 'reference/misc/functions/unpack.xml', ), ); $setup["toc"] = $TOC; $setup["toc_deprecated"] = $TOC_DEPRECATED; $setup["parents"] = $PARENTS; manual_setup($setup); ?>
(PHP 4, PHP 5, PHP 7, PHP 8)
unpack — Desempacota dados de uma string binária
Desempacota uma srting binária em um array de acordo com o formato especificado em
format
.
Os dados desempacotados são armazenados em um array associativo. Para que isto seja feito, os diferentes códigos de formato devem ser nomeados e separados por uma barra /. Se um argumento repetidor estiver presente, cada chave do array terá um número de sequência atrás do nome fornecido.
Form feitas alterações para que esta função ficasse alinhada com a linguagem Perl:
format
Consulte a página da função pack() para uma explicação sobre os códigos de formatos.
string
Os dados empacotados.
offset
O deslocamento na string a partir de onde os dados serão desempacotados.
Retorna um array associativo contendo elementos desempacotados da string
binária, ou false
em caso de falha.
Versão | Descrição |
---|---|
7.2.0 | Tipos float e double suportam Big Endian e Little Endian. |
7.1.0 |
O parâmetro opcional offset foi adicionado.
|
Exemplo #1 Exemplo de unpack()
<?php
$binarydata = "\x04\x00\xa0\x00";
$array = unpack("cchars/nint", $binarydata);
print_r($array);
?>
O exemplo acima produzirá:
Array ( [chars] => 4 [int] => 160 )
Exemplo #2 Exemplo de unpack() com um repetidor
<?php
$binarydata = "\x04\x00\xa0\x00";
$array = unpack("c2chars/nint", $binarydata);
print_r($array);
?>
O exemplo acima produzirá:
Array ( [chars1] => 4 [chars2] => 0 [int] => 40960 )
Observe que internamente o PHP armazena com sinal os valores inteiros. Se um inteiro grande longo sem sinal for desempacotado, e for do mesmo tamanho que os valores armazenados internamente pelo PHP, o resultado será um número negativo mesmo que tenha sido especificado um desempacotamento sem sinal.
Se um elemento não for nomeado, seão usados índices numéricos iniciando em 1
.
Fique ciente que se houver mais de um elemento sem nome, alguns dados serão
sobrescritos porque a numeração reiniciará a partir de 1
para cada elemento.
Exemplo #3 Exemplo de unpack() com chaves sem nome
<?php
$binarydata = "\x32\x42\x00\xa0";
$array = unpack("c2/n", $binarydata);
var_dump($array);
?>
O exemplo acima produzirá:
array(2) { [1]=> int(160) [2]=> int(66) }
Observe que o primeiro
valor especificado por c
foi
sobrescrito pelo primeiro valor de n
especificado.