2013-01-18 15 views
7

64 bit paketten: Ben PHP 5.4.6-1ubuntu1.1 (cli) (built: Nov 15 2012 01:18:34) ve benim PHP_INT_MAx kullanıyorum -1Paketi ve ben aşağıdaki kodu var tamsayı

sonucunda

$packed = pack('i',PHP_INT_MAX); 
echo unpack('i', $packed)[1]; 

olsun 9223372036854775807

eşittir mı var pack işlevi ve 64 bit tam sayılarla çalışmanın herhangi bir yolu var mı?

+1

değilim asla ettik çünkü bu alakalı tam olarak emin 'pack' kullandı, ancak -1 değerinin, aynı zamanda maksimum işaretsiz tamsayı değer kodlaması olan bire ayarlanmış tüm bitlerle kodlandığını unutmayın. Bundan biraz daha küçük bir sayı ile denerdim. – zneak

cevap

19

yerine iki 32bit olarak kaydedin: alınan

$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; 
İlgili konular