unpack

(PHP 4, PHP 5, PHP 7, PHP 8)

unpackPaketlenmiş bir ikil dizgeden verileri ayrıştırır

Açıklama

unpack(string$biçem, string$veri, int$başlangıç = 0): array|false

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.

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

Sürüm Bilgisi

Sürüm: Açıklama
7.2.0float 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.

Ö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
To Top