2014-09-12 4 views
0

저는 서버의 바이트를 해독하기 위해 PHP에서 수학을 시도하고 있지만, Java에서 할 수있는 것과 똑같은 방식으로 정수를 사용할 수 없습니다. 여기에 예제가 있습니다.PHP는 float 대신 double을 사용합니다.

echo intval(-690939880 * 134775813); 

이 현재 예제는 -2092836736을 출력합니다. 이 값은 거의 정확합니다. 그러나 Java에서는 원하는 값을 출력합니다.

System.out.println(-690939880 * 134775813); 

여기서 출력되는 값은 -2092836744입니다. 이 방정식을 PHP에서 어떻게 복제 할 수 있습니까?

위와 같이 값이 오버플로되기를 원합니다.

+2

사람들은 자바 예제에서'double's이되지 않습니다, 그들은'int's입니다. – azurefrog

+0

고정. 미안, 늦었 어. PHP에서 float 값을 사용하기 때문에 Java에서 float 값을 출력해도 PHP에서 동일한 결과가 발생한다는 점을 잊어 버렸습니다. 나는 자바에서도 double을 테스트했고 double은 잘 작동하는 것 같다. 그래서 내가 묻는거야. – baseman101

답변

0

문제가 해결되었습니다. 몇 시간 동안 검색하는 데 시간이 걸렸지 만 StackOverflow에서이 솔루션을 발견했습니다.

<?php 
echo int32Val(-690939880 * 134775813); 
//outputs -2092836744 

function int32Val($value) { 
    if ($value < -2147483648) 
     return -(-($value) & 0xffffffff); 
    elseif ($value > 2147483647) 
     return ($value & 0xffffffff); 
    return $value; 
} 
?> 

답변 : Force PHP integer overflow

관련 문제