Ver Mensaje Individual
  #5 (permalink)  
Antiguo 19/11/2003, 15:50
josemi
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Hola,

En binario, ya. Asi que lo que buscas es como hacer para leer un byte, un word, etc de un fichero. Bien, pues os comento como lo hago en una aplicacion que estoy desarrollando (mas bien es una clase mas que una aplicacion, y ando tras un hosting para finalizarla). Primero, lees todo el fichero en una variable:
Código PHP:
$this->contenido='';
$fp=fopen("fichero.bin",'rb'); // la b es para windows
$this->contenido=fread($fp,filesize("fichero.bin"));  // es necesario pasarle el tamaño del fichero para que no funcione el magic_quotes_runtime
fclose($fp); 
Ahora tienes que crear funciones para leer los tipos de datos. Le pasas como parametro la posicion del contenido donde empieza el dato:
Código PHP:
// UI8 =unsigned int de 8 bits
function getUI8($posicion) {
  return 
ord($this->contenido{$posicion}); // los {} para acceder a la cadena como si fuese un array
}

// UI16 =unsigned int de 16 bits
// asumiendo little endian 
function getUI16($posicion) {
  return 
ord($this->contenido{$posicion})|(ord($this->contenido{$posicion+1})<<8);  // si sabes C, sabes lo que significa
}

// UI32 =unsigned int de 32 bits
// asumiendo little endian 
function getUI32($posicion) {
  return 
ord($this->contenido{$posicion})|(ord($this->contenido{$posicion+1})<<8)|(ord($this->contenido{$posicion+2})<<16)|(ord($this->contenido{$posicion+3})<<24);  // si sabes C, sabes lo que significa
}

// string finalizado por \0
function getString($posicion) {
  
$cadena='';
  
$car=0;
  while (
0!=($car=$this->getUI8($posicion++))) {
            
$cadena .= chr($car);
        }
        return 
$cadena;

y asi con el resto de tipo de datos que tengas. Con esto habras leido los datos dell fichero binario. Y podras meterlos donde quieras.

Por si acaso, el $this es porque lo tengo hecho dentro de una clase.

Espero haber sido de ayuda.

Suerte.
__________________
Josemi

Aprendiz de mucho, maestro de poco.

Última edición por josemi; 19/11/2003 a las 15:54