我有一个包含2880个字符的文件,只有1
和0
s。
每个字符占用文件中的一个字节。
我们希望移动8个字符的块,将其视为位表示并将其作为一个字节移动到新文件中。结果是一个文件大小为原始文件的1/8。
到目前为止,我得到了:
$filename = "/var/www/BB/file.ppm2";
$handle = fopen($filename, "rb");
$fsize = filesize($filename);
$content_read = substr(fread($handle, $fsize), 0, 8640);
for($i = 0; $i <360; $i++) {
$offset_8 = $i * 8;
$content_read_8 = substr($content_read, $offset_8, 8);
但是如何将$content_read_8
(例如01101101
)的内容转换为一个字符的字节:$ byte_out ???
谢谢你的帮助; - )
答案 0 :(得分:1)
这是否符合您的要求?
<?php
$output = "";
$filename = "/var/www/BB/file.ppm2";
$content = file_get_contents($filename);
$content = str_split($content, 8);
foreach($content as $char) {
$output .= chr(bindec($char));
}
?>
答案 1 :(得分:0)
您可以使用按位操作:
for($i = 0; $i <360; $i++) {
$offset_8 = $i * 8;
$content_read_8 = substr($content_read, $offset_8, 8);
$char = 0;
for ($j = 0; $j < 8; $j += 1) {
// Move all the bits 1 place to the left - its like sticking a 0 to the right.
$char << 1;
// If its a '1' char, you need to adjust that bit
if ($content_read_8[$j] == '1') {
$char += 1;
}
}
}
您可以阅读有关PHP按位运算符here
的更多信息