xxd filename
可以将一个文件的二进制形式显示在终端,无需考虑文件是什么形式的编码。
如何用php实现同样的功能?
1.fopen
2.fread
3.ehco不行,不能显示文本的二进制,显示的是文本,请问,这里如何做?
我写了一段代码
<?php
$target="test.txt";
$file_handle = fopen($target, "rb");
while (!feof($file_handle)) {
$byte = fread($file_handle,1);
echo $byte;
}
fclose($file_handle );
?>
发现不行,显示的是字符本身,不是字符的二进制表达。
预计这个ehco要改,请问,如何修改。
fwrite(STDOUT,$byte); 替换 echo $byte; 也不行。
修改了一下,离成功不远了。
<?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
大家讲道理2017-04-11 09:54:27
fopen mode参数基本模式后加改为b,如rb
,用来区分二进制流和文本文件。
与此对应还可以使用 'b' 来强制使用二进制模式,这样就不会转换数据。要使用这些标记,要么用 'b' 或者用 't'作为 mode 参数的最后一个字符
PHP中文网2017-04-11 09:54:27
<?php
$target="test.txt";
$file_handle = fopen($target, "rb");
while (!feof($file_handle)) {
$byte = fread($file_handle,1);
fwrite(STDOUT,$byte);
}
fclose($file_handle );
?>
使用PHP输出输入流进行操作
PHP中文网2017-04-11 09:54:27
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("严"));
UTF8编码下的。这次应该对了。