将任何文件转换为二进制字符串,从二进制转换为文件

时间:2017-04-16 12:35:30

标签: javascript java php algorithm binary

我试图通过java或php或javascript创建2个算法(我知道这些语言,所以你可以用它们来回答我的问题)。第一个算法应该采用任何文件(exe,mp3,txt,png,docx等)并将其转换为0和1的二进制字符串。第二个算法应该将0和1的字符串转换为文件。

这可能吗?如果是,我该怎么做?

我试图发展:

 $buffer = file_get_contents("image.png");
 $length = filesize("image.png");

 if (!$buffer || !$length) {
   die("Reading error\n");
 }

 $_buffer = '';
 for ($i = 0; $i < $length; $i++) {
   $_buffer .= sprintf("%08b", ord($buffer[$i]));
 }

 echo $_buffer."<br>";

 $nb = "";
 for($i = 0;$i<strlen($_buffer)/8;$i++) {
     $sub = substr($_buffer, $i*8,$i*8+8);
     $nb .= chr(bindec($sub));
 }
 $new = fopen("aaaimage.png","wb");
 $w = fwrite($new,$nb);

仅当它转换为二进制文件时才有效,但是当它创建新文件时,它不起作用,它会创建一个大小相同的文件,但文件不能正常工作。当我尝试打开它时,新图像(在此代码中文件是图像)显示错误,错误是文件可能已损坏。

1 个答案:

答案 0 :(得分:0)

最后,我发现问题出现在代码中。使用substr函数只是小错误。 所以,正确的代码是:

 $buffer = file_get_contents("image.png");
 $length = filesize("image.png");

 if (!$buffer || !$length) {
   die("Reading error\n");
 }

 $_buffer = '';
 for ($i = 0; $i < $length; $i++) {
   $_buffer .= sprintf("%08b", ord($buffer[$i]));
 }

 echo $_buffer."<br>";

 $nb = "";
 for($i = 0;$i<strlen($_buffer)/8;$i++) {
     $sub = substr($_buffer, $i*8,8);
     $nb .= chr(bindec($sub));
 }
 $new = fopen("aaaimage.png","wb");
 $w = fwrite($new,$nb);
相关问题