array ( 0 => 'index.php', 1 => 'PHP Manual', ), 'head' => array ( 0 => 'UTF-8', 1 => 'tr', ), 'this' => array ( 0 => 'function.unpack.php', 1 => 'unpack', ), 'up' => array ( 0 => 'ref.misc.php', 1 => 'Çeşitli İşlevler', ), 'prev' => array ( 0 => 'function.uniqid.php', 1 => 'uniqid', ), 'next' => array ( 0 => 'function.usleep.php', 1 => 'usleep', ), 'alternatives' => array ( ), 'source' => array ( 'lang' => 'tr', '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 — Paketlenmiş bir ikil dizgeden verileri ayrıştırır
Paketlenmiş bir ikil dizgeden veriyi belirtilen
biçem
dizgesine göre ilişkisel bir diziye çıkarır.
unpack() çıkardığı veriyi bir ilişkisel dizide saklar. Bunu sağlamak için biçem kodları farklı isimlendirilir ve bir bölü çizgisi / ile ayrılırlar. Yineleyici bir değer belirtilirse dizi anahtarları, belirtilen ismin ardına eklenmiş sıra numaraları içerecektir.
Perl uyumu için aşağıdaki değişiklikler uygulandı:
"a" kodu artık sondaki NULL baytları tutuyor.
"A" kodu artık tüm ASCII boşluklarını (boşluklar, sekmeler, satırsonları, satır başları ve NULL baytlar) ayırıyor.
NULL ile doldurulmuş dizeler için "Z" kodu eklendi; sondaki NULL baytları kaldırıyor.
biçem
Biçem kodlarının açıklamaları için pack() işlevine bakınız.
veri
Paketlenmiş veri.
başlangıç
Verininin çıkarılmaya başlanacağı başlangıç yeri.
İkil dizgeden ayrıştırılan verileri içeren bir ilişkisel
dizi, başarısızlık durumunda false
döner
Sürüm: | Açıklama |
---|---|
7.2.0 | float ve double türlerin ikisininde değerli baytları başta ve sonda olabiliyor. |
7.1.0 |
Seçimlik başlangıç bağımsız değişkeni eklendi.
|
Örnek 1 - unpack() örneği
<?php
$binarydata = "\x04\x00\xa0\x00";
$array = unpack("cchars/nint", $binarydata);
print_r($array);
?>
Yukarıdaki örneğin çıktısı:
Array ( [chars] => 4 [int] => 160 )
Örnek 2 - unpack() ve bir yineleyici
<?php
$binarydata = "\x04\x00\xa0\x00";
$array = unpack("c2chars/nint", $binarydata);
print_r($array);
?>
Yukarıdaki örneğin çıktısı:
Array ( [chars1] => 4 [chars2] => 0 [int] => 40960 )
PHP dahili olarak tamsayı değerleri işaretli olarak sakladığından, büyükçe bir işaretsiz uzun tamsayıyı ayrıştırmak isterseniz, PHP negatif sayıları da aynı boyutta sakladığından elde edilen değer, biçem dizgesinde işaretsiz olduğunu belirtseniz bile, negatif bir sayı olacaktır.
Bir öğenin ismi yoksa 1
'den başlayan sayısal indisler
kullanılır. Birden fazla isimsiz öğenin bulunmamasına dikkat etmek
gerekir, yoksa 1
'den "yeniden" başlayan sayısal
indisler eskilerini geçersiz kılar.
Örnek 3 - unpack() ve isimsiz anahtarlar
<?php
$binarydata = "\x32\x42\x00\xa0";
$array = unpack("c2/n", $binarydata);
var_dump($array);
?>
Yukarıdaki örneğin çıktısı:
array(2) { [1]=> int(160) [2]=> int(66) }
c
belirtecindeki ilk değer
n
belirtecindeki ilk değer tarafınan geçersiz
kılınmaktadır.