2016-11-27 6 views
0

18000000을 읽는 16 진수 문자열이 있습니다.이 문자열은 호스트 바이트 순서 (리틀 엔디안)이며 네트워크 바이트 순서로 변환해야합니다. (빅 엔디안). 결과 16 진수 문자열은 00000018이됩니다.호스트 바이트 순서 (리틀 엔디안)에서 네트워크 바이트 순서 (빅 엔디안)로 변환

내가 어떻게 PHP에서 이것을 달성 할 18000000 to 00000018

을 변환 할 필요가 요약하면?

+0

지금까지 해봤습니까? – bfontaine

+0

strrev()를 시도했지만'00000081'이 발생했습니다 – Saad

답변

0

또 다른 방법 :

/** 
* Convert $endian hex string to specified $format 
* 
* @param string $endian Endian HEX string 
* @param string $format Endian format: 'N' - big endian, 'V' - little endian 
* 
* @return string 
*/ 
function formatEndian($endian, $format = 'N') { 
    $endian = intval($endian, 16);  // convert string to hex 
    $endian = pack('L', $endian);  // pack hex to binary sting (unsinged long, machine byte order) 
    $endian = unpack($format, $endian); // convert binary sting to specified endian format 

    return sprintf("%'.08x", $endian[1]); // return endian as a hex string (with padding zero) 
} 

$endian = '18000000'; 
$big = formatEndian($endian, 'N'); // string "00000018" 
$little = formatEndian($endian, 'V'); // string "18000000" 

보다 약 pack 형식 난 그냥에 발견 http://www.php.net/manual/en/function.pack.php

+0

고맙습니다 – Saad

0

당신은 엔디안 변환 pack/unpack 기능을 사용할 수 있습니다

$input = 18000000; 

$length=strlen((string)$input); 
$sum=0; 
$numbers=""; 
while ($length>0) {  
    $number = $input % 10; 
    $numbers.= $number;   
    $input = $input/10; 
    $length--; 
} 
echo $numbers; 
+0

이 솔루션은 16 진수 문자열에서는 작동하지 않습니다 ('0A0B0C0D' 문자열은 오류를 생성합니다) – krlv

0

에서 살펴 보려면 이 대답은 무언가를 검색하는 동안,하지만 나는 훨씬 더 간단하게 뭔가를 끝내었다. 이 트릭은 않을 것이다, 당신의 bigEndian의 입력이 아니라 그런 식으로 포맷되어 있지 않은 경우 분명히

$littlendian = join(array_reverse(str_split($bigendian), 2))); 

: 인스 나는 나의 문자열은 항상 두 개의 문자 경계)에 정렬 할 필요에 따라서 0을 선두하는 경우가 줄 알았어 직접 일할 수 있습니다.