2013-01-18 90 views
7

我有以下代碼:包並解壓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位整數一起使用?

+1

我不能完全肯定這是相關的,因爲我從來不使用'pack',但請記住-1是所有位設置爲1,這也是最大無符號整數值編碼。我會嘗試一個比這更小的大數字。 – zneak

回答

19

它另存爲兩個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;