unpack
(PHP 4, PHP 5, PHP 7, PHP 8)
unpack — Paketlenmiş bir ikil dizgeden verileri ayrıştırır
Açıklama
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.
Bağımsız Değişkenler
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.
Dönen Değerler
İkil dizgeden ayrıştırılan verileri içeren bir ilişkisel
dizi, başarısızlık durumunda false
döner
Örnekler
Ö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
)
Notlar
Dikkat
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.
Dikkat
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.
Ayrıca Bakınız
- pack() - Veriyi ikil bir dizge halinde paketler