2011-10-28 8 views
0

this listの最初の構造体を解凍する方法は?この構造体をPHPで解凍するには?

私は整数として2番目のフィールドをしたい(またはPHPは、64ビットのint型をサポートしていないため、floatとしてより良いと言うこと)マリオへ

+2

PHPは64ビット整数をサポートしています。ちょうど '解凍 'はしません。 2つの32ビット値を結合して読み込みます。 (テストすることはできません、従来のインストールは便利です。) – mario

+1

[PHP:pack/unpack 64bit int on 64bit architecture](http://stackoverflow.com/questions/3265285/php-pack-unpack-64bit-int) -on-64bit-architecture) – mario

答えて

0

おかげで、私はこのようにそれを解決:

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

どこ$this->read()

mb_substr($data, $offset, $length, '8bit'); 
+1

興味深いことに、これはうまくいくはずです。 "2つの32ビットを結合する"というのは、単に($ a [1] << 32)+ $ b [1] 'を追加するという意味ではありません。上位32ビットを32ビット左にシフトして、下位32ビットのスペースを確保する必要があります。 – KingCrunch

+0

あなたの意見は正しいですが、提案どおりには機能しません。私は以下のデータを整数に変換しようとしました(16進エディタから):62 EA 9F 33 01 00 00 00これは5.161.085.538(〜5GB)でなければなりませんが、intから吐き出されます(866118243)。 Par2の医者は、すべての整数がリトルエンディアンであると言います(つまり、私は同じデータを結果として返しますが、アンパックでは 'V'を使用する必要があります)。何か案が?。 – user990827

+0

最後に、$ packet ['file_length'] = $ a [1] + $ b [1] * 0x100000000; ' – user990827

関連する問題