2017-04-16 1 views
-8

자바 또는 PHP 또는 자바 스크립트를 통해 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); 

그것은 바이너리로 변환하는 경우에만 작동하지만, 새 파일을 만들 때, 그 작동하지 않습니다, 그것은 같은 크기의 파일을 생성하지만 파일은 다음과 같습니다

는 그 개발을 시도 그것이해야대로 작동하지 않습니다. 새 이미지 (이 코드에서 파일은 이미지 임)를 열려고하면 오류가 표시됩니다. 오류는 파일이 손상되었을 수 있다는 것입니다.

+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); 
관련 문제