2009-06-07 2 views
3

나는 배열을 가지고있다. DWORD가 필요합니다. 나는 시도 :PHP 바이트 2을 DWord

$dword = $arr[0]+$arr[1]*265+$arr[2]*265*265+$arr[3]*265*265*265; 

옳고 내가 잘못하고있는 중이 야인가요?

답변

4

시도 :

$dword = (($arr[3] & 0xFF) << 24) | (($arr[2] & 0xFF) << 16) | (($arr[1] & 0xFF) << 8) | ($arr[0] & 0xFF); 

그것은 일부 수정으로 당신의 방법을 수행 할 수 있습니다

$dword = $arr[0] + $arr[1]*0x100 + $arr[2]*0x10000 + $arr[3]*0x1000000; 

또는 팩을 사용하여/압축 해제 :

$dword = array_shift(unpack("L", pack("CCCC", $arr[0], $arr[1], $arr[2], $arr[3]))); 
+0

감사합니다. –

0

을 또는 적어도 사용에 256보다 265.

+0

@Emil, 0xff는 255이므로 잘못되었습니다. – driis

+0

죄송합니다. 내 잘못이야. :) –

+0

내 코드에 256이 있는데, 여기에 잘못 써 놨습니다 : o. Thx –

0

요 ur 코드가 제대로 작동해야하지만 265가 아닌 256으로 곱해야합니다. (8 비트에서는 2^8 = 256 고유 값이 있습니다.) 256으로 곱하는 것은 비트 8을 왼쪽으로 이동시키는 것과 동일하기 때문에 작동합니다.

아마도 의도를 더 잘 전달하기 위해 비트 연산자를 사용하는 것이 좋습니다. http://theopensourcery.com/phplogic.htm

+0

내 코드에 256이 있는데, 여기에 잘못 써 놨습니다 : o. Thx –

2

또는

<?php 
$arr = array(95,8,0,0); 
$bindata = join('', array_map('chr', $arr)); 
var_dump(unpack('L', $bindata));
모두 시도해보십시오 (Emil H와 내 코드) 결과로 2143을 제공합니다.

+0

+1. 나는 같은 방식으로 생각하고 있었지만 먼저 시도하고 싶었다. 당신이 이미 그것을 제안했다는 것을 알기 위해 그것을 나의 대답에 추가했습니다. :) –

관련 문제