2013-09-04 2 views
0

나는 이진 파일을 읽어야하는 매우 간단한 PHP 코드를 가지고 있지만, 그것은 작동하지 않습니다 sampleMdl.bin의PHP에서 바이너리 파일을 읽을 수 없습니까?

<?php 
$fid = fopen("sampleMdl.bin","rb"); 
echo "No. parts: " . fread($fid, 2) . "<br/>"; 

fclose($fid); 
?> 

첫 번째 2 바이트 정수 2. 그러나 "후 페이지가 표시 아무것도를 포함 아니오 부품 : " PHP에서 바이너리 파일을 읽지 않도록하는 서버 설정이 있습니까?

+0

파일에 포함되는 것입니다

<?php $fid = fopen("sampleMdl.bin", "rb"); $NA = array_values(unpack("Sshort", fread(fid, 2))); echo "No. parts: " . $NA[0] . "<br/>"; fclose($fid); ?> 

? ! –

+0

숫자 데이터. 앞에서 말했듯이 처음 2 바이트는 정수 2를 포함합니다. – ArthurN

+2

실제로 이진 데이터입니까? ('02 00' 바이트가 파일에 있습니다.)이 경우 바이트를 정수로 해석해야합니다. 그렇지 않으면 PHP는 문자열을 가정합니다. 또는 ASCII (바이트'30 32' = "02"가 파일에 있음)입니다. –

답변

0

은 압축을 풀고()와 array_values ​​()의 조합을 사용하여 이미 해결책을 찾았 sampleMdl.bin의 처음 2 바이트 02 00

1

이진 정수를 읽습니다.

$bytes = fread($fld, 2); 
$n = $bytes[0] | ($bytes[1] << 8); // The number 

리틀 엔디안 형식입니다. 다른 방법으로도 빅 엔디안이 될 수 있습니다.

$n = $bytes[1] | ($bytes[0] << 8); // The number 

이 경우 음수는 발생하지 않으므로 충분합니다.

관련 문제