2012-10-02 4 views
4

은 정수를 바이트 배열으로 변환하는 코드를 보았습니다. 다음은 PHP에서 바이트 배열에 3 (How to convert integer to byte array in php를) 정수를 변환하는 방법 에 코드입니다 :PHP에서 정수로 바이트 배열을 변환하는 방법?

<?php 

$i = 123456; 
$ar = unpack("C*", pack("L", $i)); 

print_r($ar); 
?> 

위의 코드는 출력 :

//output: 
Array 
(
    [1] => 64 
    [2] => 226 
    [3] => 1 
    [4] => 0 
) 

하지만 내 문제는 지금 얼마나 에 reverse이 과정. 바이트 배열을 정수로 변환하는 것을 의미합니다. 위의 경우 출력은

입니다. 아무도 도와 줄 수 없습니까? 나는 큰 도움이 될 것이다. 미리 감사드립니다.

+0

시도이 캐스팅 입력 할 수 있습니다. –

+0

[('C \ *', "string") unpack Reverting (https://stackoverflow.com/questions/18357008/reverting-unpackc-string) – jk2K

답변

9

왜 수학 문제처럼 다루지 않습니까?

$ I = ($ 아칸소 [3] < < 24) + ($ 아칸소 [2] < < 16) + ($ 아칸소 [1] < < 8) + $ AR [0]; PHP에 서명 4 바이트 값을 얻기 위하여

+1

와우의 가능한 복제 와우,이 문제는 해결되지만 코드를 변경합니다. $ i = ($ ar [4] << 24) + ($ ar [3] << 16) + ($ ar [2] << 8) + ($ ar [1]); $ ar [0]이 존재하지 않으므로 더하기 기호 사이에 괄호가 추가되지 않으면 0 값을 반환합니다. 하지만 고마워. – gchimuel

+0

그래, 죄송합니다, 제로 인덱스 배열을 사용 ... – PRB

4

L은 4 바이트 길이이므로 배열의 요소 수를 알 수 있습니다. 따라서 간단하게 작업을 역으로 수행 할 수 있습니다.

$ar = [64,226,1,0]; 
$i = unpack("L",pack("C*",$ar[3],$ar[2],$ar[1],$ar[0])); 
3

당신은이 작업을 수행 할 필요가 :

$temp = ($ar[0]<<24) + ($ar[1]<<16) + ($ar[2]<<8) + ($ar[3]); 
if($temp > 2147483648) 
    $temp -= 4294967296; 
+0

당신은 내 문제를 해결, 정말 고마워! – donatJ

+1

이 해결 방법은 PHP의 x64 빌드 (Windows를 제외한)에 필요합니다. 그리고 코드에 실수가 하나 있습니다. 비교는 단순히 '더 큰 것'대신 '더 크거나 같음'이어야합니다. –

관련 문제