首頁  >  文章  >  後端開發  >  用php寫出檔案的二進位形式

用php寫出檔案的二進位形式

WBOY
WBOY原創
2016-08-18 09:16:081309瀏覽

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>

fopen mode參數基本模式後加改為b,如rb,用來區分二進位流和文字檔。

與此對應也可以使用 'b' 來強制使用二進位模式,這樣就不會轉換資料。要使用這些標記,要麼用 'b' 或用 't'作為 mode 參數的最後一個字元

在伺服器端進行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