私は次のコードを持っています:
$packed = pack('i',PHP_INT_MAX);
echo unpack('i', $packed)[1];
その結果、私は-1
私が使用しているPHP 5.4.6-1ubuntu1.1 (cli) (built: Nov 15 2012 01:18:34)
と私PHP_INT_MAx
は等しい9223372036854775807
pack
関数と64ビット整数を操作する方法はありますか?
私は次のコードを持っています:
$packed = pack('i',PHP_INT_MAX);
echo unpack('i', $packed)[1];
その結果、私は-1
私が使用しているPHP 5.4.6-1ubuntu1.1 (cli) (built: Nov 15 2012 01:18:34)
と私PHP_INT_MAx
は等しい9223372036854775807
pack
関数と64ビット整数を操作する方法はありますか?
代わりに2つの32ビットとして保存します。
$value = PHP_INT_MAX;
$highMap = 0xffffffff00000000;
$lowMap = 0x00000000ffffffff;
$higher = ($value & $highMap) >>32;
$lower = $value & $lowMap;
$packed = pack('NN', $higher, $lower);
list($higher, $lower) = array_values(unpack('N2', $packed));
$originalValue = $higher << 32 | $lower;