2017-04-16 31 views
-8

我想创建2个算法通过Java或PHP或JavaScript(我知道这些语言,所以你可以用它们来回答我的问题)。第一种算法应该采用任何文件(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); 

它时,它转换为二进制的作品而已,但是当它创建新的文件,它不工作,它创建具有相同大小的文件,但该文件是不应该如它应该那样工作。新图像(在此代码中文件是图像)在我试图打开它时显示错误,错误在于该文件可能已损坏。

+2

你有没有做过任何研究或做过任何尝试? – NewToJS

+0

一切皆有可能,但你有什么尝试?! – Gntem

+0

@NewToJS是的,我在Google上搜索了很多,我试图自己编写一些东西,但是失败了。我不知道这样的转换。 – ShaiLA

回答

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); 
相关问题