Creato da pastuweb.com
Share My Page
My Social Accounts
Account FaceBook Account LinkedIn Account Twitter Account Google Plus Account Git Hub

Questa classe definisce alcuni metodi utili nella lettura di file binari. 
Ci sono sia funzioni che permettono di gestire array di byte, array di words.
Altre invece fanno una conversione da Byte a Int o Char.
check_bit() invce permette di controllare se il byte passato contiene un 1 o 0 in quella certa posizione.

// --------- classe base che fornisce i metodi di lettura di porzioni di file + eventuali conversioni
class ByteStream {

    function isBitSet($value,$bitpos)
    {
        if (($value & pow(2,$bitpos))==pow(2,$bitpos))
            return 1;
        else
            return 0;
    }

function showlabel($label,$decoration="")
{
   if ($decoration!="")
      echo sprintf("%80.80s\n%s\n%80s\n",$decoration,$label,$decoration);
   else
      echo sprintf("%s\n",$label);
}

function displayInfo($label="",$decoration="")
{
   if ($label!="")
      $this->showlabel($label,$decoration);
   foreach($this->fieldsDescriptor as $k=>$v)
   {
      $val=$v["value"];
      $this->displaySingleParameter($k,$val);
   }
}

function displaySingleParameter($k,$v)
{
   echo sprintf("%40.40s%40.40s\n",$k,$v);
}

function parseStream(&$streamPointer)
{
   foreach($this->fieldsDescriptor as $key => $descriptor)
   {
      $handler=$this->fieldsDescriptor[$key]["handler"];
      $length= $this->fieldsDescriptor[$key]["length"];
      $this->fieldsDescriptor[$key]["value"]=$this->$handler($streamPointer,$length);
   }
}


function nByteArrayOfPoints($f,$len)
{
   $i=0;
   while($i<$len)
   {
      $c=fread($f,1);
      $outArr[$i]=ord($c);
      $i++;
   }
   return $outArr;
}

function nWordArrayOfPoints($f,$len)
{
   $i=0;
   while($i<$len)
   {
      /*
      $c=fread($f,1);
      echo "nByteArrayOfPoints[".$c."]<".chr($c).">{".ord($c)."}\n";
      $outArr[$i]=ord($c);
      */
      $outArr[$i]=$this->twoByteInt($f,2);
      $i++;
   }
   return $outArr;
}

function twoByteInt($f,$len)
{
   $byteStr=fread($f,$len);
   // echo "twoByteInt: input byteStr is: <". bin2hex($byteStr). ">\n";
   $arr=unpack("nint",$byteStr);
   // print_r($arr);
   return $arr["int"];
}

function fourByteInt($f,$len)
{
   $bin=fread($f,$len); //stringa unica di 4 byte, TUTTI SIGNIFICATIVI per il valore finale
   
   if (PHP_INT_SIZE <= 4){ 
        list(,$h,$l) = unpack('n*', $bin); 
        return ($l + ($h*0x010000)); 
    }else{ 
        list(,$int) = unpack('N', $bin); 
        return $int; 
    } 
}
function check_bit($value,$n=8)
{
    $value = (int)$value;
    if($value & (1<<(8-$n))) { return 1; }
    else { return 0; }
}


function twoByteAsciiInt($f,$len)
{
   $byteStr=fread($f,$len);
   // echo "twoByteInt: input byteStr is: <". bin2hex($byteStr). ">\n";
   $arr=unpack("nint",$byteStr);
   // print_r($arr);
   return chr($arr["int"]);
}

function nByteChar($f,$len)
{
   $i=0;
   $outStr="";
   while($i<$len)
   {
      $c=fread($f,1);
      if (ord($c)!=0)
         $outStr.=$c;
      /*
      echo "[".$c."]\n";
      echo "<".chr($c).">\n";
      echo "{".sprintf("%x",ord($c))."}\n";
      */
      $i++;
   }
   return $outStr;
}
}; // end class ByteStream

Average (1 Vote)
The average rating is 5.0 stars out of 5.