>백엔드 개발 >PHP 튜토리얼 >PHP를 사용하여 파일의 바이너리 형식을 작성합니다.

PHP를 사용하여 파일의 바이너리 형식을 작성합니다.

WBOY
WBOY원래의
2016-08-18 09:16:081361검색

xxd filename
은 파일 인코딩을 고려하지 않고 터미널에 파일의 바이너리 형식을 표시할 수 있습니다.
PHP를 사용하여 동일한 기능을 구현하는 방법은 무엇입니까?
1.fopen
2.fread
3.ehco가 작동하지 않습니다. 텍스트의 바이너리를 표시할 수 없습니다. 어떻게 해야 합니까?

코드를 작성했습니다

<code><?php
    $target="test.txt";
    $file_handle = fopen($target, "rb");
    while (!feof($file_handle)) {
       $byte = fread($file_handle,1);
       echo $byte;
    }
    fclose($file_handle );
?>
</code>

작동하지 않는 것을 확인했는데, 표시되는 것은 문자의 이진 표현이 아닌 문자 자체입니다.
이 ehco는 수정이 필요할 것으로 예상됩니다. 수정 방법을 알려주세요.
fwrite(STDOUT,$byte);는 echo $byte;를 대체해도 작동하지 않습니다.

몇 가지 수정을 거치면 성공이 멀지 않습니다.

<code><?php
function  parse($target){
    $file_handle = fopen($target, "rb");
    while (!feof($file_handle)) {
       $byte = fread($file_handle,1);
       echo  base_convert(ord($byte),10,2);
    }   
    fclose($file_handle );
} 
parse('test.txt');  
?>

用一个只包含换行键的文件测试
xxd  -b ./test.txt
0000000: 00001010  

我的程序运行结果是:
10100</code>

답글 내용:

xxd filename
은 파일 인코딩을 고려하지 않고 터미널에 파일의 바이너리 형식을 표시할 수 있습니다.
PHP를 사용하여 동일한 기능을 구현하는 방법은 무엇입니까?
1.fopen
2.fread
3.ehco가 작동하지 않습니다. 텍스트의 바이너리를 표시할 수 없습니다. 어떻게 해야 합니까?

코드를 작성했습니다

<code><?php
    $target="test.txt";
    $file_handle = fopen($target, "rb");
    while (!feof($file_handle)) {
       $byte = fread($file_handle,1);
       echo $byte;
    }
    fclose($file_handle );
?>
</code>

작동하지 않는 것을 확인했는데, 표시되는 것은 문자의 이진 표현이 아닌 문자 자체입니다.
이 ehco는 수정이 필요할 것으로 예상됩니다. 수정 방법을 알려주세요.
fwrite(STDOUT,$byte);는 echo $byte;를 대체해도 작동하지 않습니다.

몇 가지 수정을 거치면 성공이 멀지 않습니다.

<code><?php
function  parse($target){
    $file_handle = fopen($target, "rb");
    while (!feof($file_handle)) {
       $byte = fread($file_handle,1);
       echo  base_convert(ord($byte),10,2);
    }   
    fclose($file_handle );
} 
parse('test.txt');  
?>

用一个只包含换行键的文件测试
xxd  -b ./test.txt
0000000: 00001010  

我的程序运行结果是:
10100</code>

바이너리 스트림과 텍스트 파일을 구별하는 데 사용되는 rb과 같은 기본 모드 이후 fopen 모드 매개변수가 b로 변경됩니다.

따라서 'b'를 사용하여 데이터가 변환되지 않도록 바이너리 모드를 강제할 수도 있습니다. 이러한 태그를 사용하려면 모드 매개변수의 마지막 문자로 'b' 또는 't'를 사용하세요

서버 측의 Base64 인코딩 및 클라이언트 측의 Base64 디코딩

<code><?php
    $target="test.txt";
    $file_handle = fopen($target, "rb");
    while (!feof($file_handle)) {
       $byte = fread($file_handle,1);
       fwrite(STDOUT,$byte);
    }
    fclose($file_handle );
?></code>

PHP 출력 및 입력 스트림을 사용하여 작동

<code>function strToTwo($str)
{
    $res = '';
    $len = strlen($str);
    for($i = 0; $i < $len; $i++) {
        $tmp = base_convert(ord($str[$i]), 10, 2);
        $res .= $tmp . ' ';
    }
    
    return trim($res);
}

var_dump(strToTwo("严"));</code>

UTF8 인코딩. 이번에는 맞아야합니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.