2011-10-28 2 views
0

this list의 첫 번째 구조를 푸는 방법()? PHP로이 구조체를 푸는 방법()?

나는 정수 (또는 PHP는 64 비트 INT를 지원하지 않기 때문에 float로서 더 나은 말을) 마리오에

+2

PHP는 64 비트 정수를 지원합니다. 단지'풀다 '는하지 않습니다. 두 개의 32 비트 값을 결합하여 읽습니다. (테스트 할 수없고 레거시 설치가 편리하지 않습니다.) – mario

+1

[PHP : pack/unpack 64bit int of 64bit architecture] 가능한 복제본 (http://stackoverflow.com/questions/3265285/php-pack-unpack-64bit-int) -on-64bit-architecture) – mario

답변

0

감사합니다, 나는 그것을 해결과 같이 두 번째 필드를 원하는 :

$a = unpack("i", $this->read(4)); 
$b = unpack("i", $this->read(4)); 
$packet['file_length'] = $a[1] + $b[1] * 0x100000000; 

경우 $this->read()

mb_substr($data, $offset, $length, '8bit'); 
+1

흥미 롭다. "두 개의 32 비트를 결합하는 것"은 단지 ($ a [1] << 32) + $ b [1]'을 추가하는 것을 의미하지 않습니다. 상위 32 비트를 32 비트 왼쪽으로 이동시켜 하위 32 비트 공간을 확보해야합니다. – KingCrunch

+0

네 말이 맞지만 네가 제안한대로 작동하지 않는다. 다음 데이터를 정수로 변환하려고 시도했습니다 (16 진수 편집기에서). 62 EA 9F 33 01 00 00 00 5.161.085.538 (~ 5gb)가되어야하지만 int (866118243)가됩니다. Par2 의사는 모든 정수가 리틀 엔디안이라고 말합니다 (즉, 동일한 데이터를 얻지 만 언팩에서는 'V'를 사용해야 함). 어떤 생각?. – user990827

+0

마지막으로 : $ packet [ 'file_length'] = $ a [1] + $ b [1] * 0x100000000; – user990827