this listの最初の構造体を解凍する方法は?この構造体をPHPで解凍するには?
私は整数として2番目のフィールドをしたい(またはPHPは、64ビットのint型をサポートしていないため、floatとしてより良いと言うこと)マリオへ
this listの最初の構造体を解凍する方法は?この構造体をPHPで解凍するには?
私は整数として2番目のフィールドをしたい(またはPHPは、64ビットのint型をサポートしていないため、floatとしてより良いと言うこと)マリオへ
おかげで、私はこのようにそれを解決:
$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');
興味深いことに、これはうまくいくはずです。 "2つの32ビットを結合する"というのは、単に($ a [1] << 32)+ $ b [1] 'を追加するという意味ではありません。上位32ビットを32ビット左にシフトして、下位32ビットのスペースを確保する必要があります。 – KingCrunch
あなたの意見は正しいですが、提案どおりには機能しません。私は以下のデータを整数に変換しようとしました(16進エディタから):62 EA 9F 33 01 00 00 00これは5.161.085.538(〜5GB)でなければなりませんが、intから吐き出されます(866118243)。 Par2の医者は、すべての整数がリトルエンディアンであると言います(つまり、私は同じデータを結果として返しますが、アンパックでは 'V'を使用する必要があります)。何か案が?。 – user990827
最後に、$ packet ['file_length'] = $ a [1] + $ b [1] * 0x100000000; ' – user990827
PHPは64ビット整数をサポートしています。ちょうど '解凍 'はしません。 2つの32ビット値を結合して読み込みます。 (テストすることはできません、従来のインストールは便利です。) – mario
[PHP:pack/unpack 64bit int on 64bit architecture](http://stackoverflow.com/questions/3265285/php-pack-unpack-64bit-int) -on-64bit-architecture) – mario