如何将8字符位表示字符串作为单个字节输出到文件?

时间:2014-02-21 09:03:14

标签: php byte bit-manipulation bit

我有一个包含2880个字符的文件,只有10 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 ???

谢谢你的帮助; - )

2 个答案:

答案 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

的更多信息