2013-01-18 3 views
7

64 비트 압축 : 내가 PHP 5.4.6-1ubuntu1.1 (cli) (built: Nov 15 2012 01:18:34)PHP_INT_MAx을 사용하고 -1팩과 나는 다음과 같은 코드 한 정수

을 결과

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

를 얻을 수는 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;