この構造体をPHPで解凍するには?

このリストの最初の構造を解凍する方法は?

私は整数として2番目のフィールドを(またはPHPは64ビットのintをサポートしていないので、フロートとして良いと言うために)

0
PHPは64ビット整数をサポートしています。 unpack するだけではありません。 2つの32ビット値を結合して読み込みます。 (テストすることはできません。従来のインストールは便利です。)
追加された 著者 mario,

1 答え

マリオのおかげで、私はこれを次のように解決しました:

$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
追加された
これは浮動小数点の精度に達するまで動作しますが、最下位ビットは失われます。私が間違っていないとすれば、あなたはIEEE 64ビットの浮動小数点値に相当する52ビットを持っています。これはうまくいけば十分です:-)
追加された 著者 Archimedix,
興味深いことに、これはうまくいくはずです。 "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 - 日本のコミュニティ [ja]
PHP - 日本のコミュニティ [ja]
4 参加者の

このグループではPHPについて話します。 パートナー:kotaeta.com