PHP ile bu yapı nasıl açılır ()?

İlk yapıyı bu listeden nasıl çıkartırsınız?

İkinci alanı tamsayı olarak istiyorum (ya da PHP 64bit'i desteklemediği için float kadar iyi)

0
PHP 64 bit tam sayıları destekler. Sadece paketini aç yapmaz. İki 32 bitlik değeri okuyun ve bunları birleştirin. (Test edilemez, eski kurulum kullanışlı değil.)
katma yazar mario, kaynak

1 cevap

Mario'ya teşekkürler, şöyle çözdüm:

$a = unpack("i", $this->read(4));
$b = unpack("i", $this->read(4));
$packet['file_length'] = $a[1] + $b[1] * 0x100000000;

Where $this->read() is a wrapper for:

mb_substr($data, $offset, $length, '8bit');
0
katma
Bu sadece bir floatın hassasiyetine varana kadar çalışır ... daha sonra en az anlamlı bitleri kaybedersiniz. Eğer yanılmıyorsam, IEEE 64-bit kayan nokta değerinde önemli miktarda 52 bit var.
katma yazar Archimedix, kaynak
İlginç, bu işe yarayacak. "İki 32bit'i birleştirmek" sadece onları eklemek anlamına gelmez: ($ a [1] << 32) + $ b [1] . Alt 32 bitlere yer açmak için üst 32 bit 32 biti sola kaydırmalısınız.
katma yazar KingCrunch, kaynak
Haklısın, ancak teklif ettiğin gibi çalışmıyor. Aşağıdaki verileri tamsayıya (hex editöründen) dönüştürmeyi denedim: 62 EA 9F 33 01 00 00 00 Bu, 5.161.085.538 (~ 5gb) olmalıdır, ancak int (866118243) tükürür. Par2 dokümanı, bütün tam sayıların küçük bir endian olduğunu (yani 'V' paketini açmak için kullanmam gerektiği anlamına gelir, ancak 'ben' aynı veriyle sonuçlanır ...). Herhangi bir fikir?.
katma yazar user990827, kaynak
Sonunda aldım: $ paket ['file_length'] = $ a [1] + $ b [1] * 0x100000000;
katma yazar user990827, kaynak