我正在尝试通过 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);
它仅在转换为二进制文件时才有效,但是当它创建新文件时,它不起作用,它创建了一个大小相同的文件,但该文件无法正常工作。新图像(在此代码中,文件是图像)在我尝试打开它时显示错误,错误是文件可能已损坏。
最后,我发现问题出在代码上。使用 substr func 只是一个小错误。所以,正确的代码是:
$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);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句