• Viernes 29 de Marzo de 2024, 09:06

Autor Tema:  Ficheros en Binario/hexadecimal  (Leído 3024 veces)

SergioyoPlayer

  • Miembro activo
  • **
  • Mensajes: 31
    • Ver Perfil
Ficheros en Binario/hexadecimal
« en: Sábado 18 de Octubre de 2008, 21:48 »
0
Veréis: quiero poder leer y crear ficheros en mdo binario ("a pelo"). Yo codifico e interpreto cómo está guardado el fichero, al estilo "editor hexadecimal", que te abre lo que sea y ves cómo está.
Ya me he definido las funciones necesarias para represetar el binario y todo eso, pero no sé de qué tipo tiene que ser declarado el fichero :s

O he intentado con BYTE, y traducir a binario, pero es igual que abrirlo en modo texto (no es lo que yo quiero, ya que no abre todos los ficheros). He probado con declararlo de tipo BOOLEAN, alternando el TRUE a 1 y luego probé a 0, pero nada.

Alguna idea?? Os pongo mi "aplicación experimental" como adjunto

Sobre todo, quedáos con la idea de que necesito poder abrir CUALQUIER FICHERO como un editor hexadecimal lo hace.

Gracias de antemano!!
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Ficheros en Binario/hexadecimal
« Respuesta #1 en: Sábado 18 de Octubre de 2008, 22:04 »
0
¿Crees de verdad que alguien en su sano juicio va a descargar y ejecutar un programa que ni siquiera sabe a ciencia cierta de dónde ha salido? Yo no.

Código: Pascal
  1.  
  2. VAR f_binario: FILE OF byte;
  3.  
  4.  

eternity

  • Miembro activo
  • **
  • Mensajes: 78
  • Nacionalidad: ar
    • Ver Perfil
    • http://lameriendadejuan.blogspot.com/
Re: Ficheros en Binario/hexadecimal
« Respuesta #2 en: Domingo 19 de Octubre de 2008, 04:11 »
0
Lo que quieres es hacer un programa que haga algo de este tipo:

Código: Text
  1.  
  2.  
  3. "000000000  4C 6F 20 71 75 65 20 71-75 69 65 72 65 73 20 65   |Lo que quieres e|"
  4. "000000010  73 20 68 61 63 65 72 20-75 6E 20 70 72 6F 67 72   |s hacer un progr|"
  5. "000000020  61 6D 61 20 71 75 65 20-68 61 67 61 20 61 6C 67   |ama que haga alg|"
  6. "000000030  6F 20 64 65 20 65 73 74-65 20 74 69 70 6F 3A      |o de este tipo: |"
  7.  
  8.  
  9.  

si es asi consultame, si no, no entiendo que es lo que queres hacer!


SergioyoPlayer

  • Miembro activo
  • **
  • Mensajes: 31
    • Ver Perfil
Re: Ficheros en Binario/hexadecimal
« Respuesta #3 en: Domingo 19 de Octubre de 2008, 13:04 »
0
Es precisamente lo que dice Eternity jeje

Pero quiero que sea capaz de abrir cualquier tipo de dato escrito en disco (con lo de BYTE solo me abre los de texto y los demás, abre "solo un cacho", porque el EOF salta antes de acabar :s)

Respecto a lo de bajar una aplicación que en efecto, no sabes de dónde ha salido, está en rar por algo ¬¬

Pd.: Si me puedes decir cómo declarar el tipo y cómo leerlo, te lo agradecería mucho eternity

eternity

  • Miembro activo
  • **
  • Mensajes: 78
  • Nacionalidad: ar
    • Ver Perfil
    • http://lameriendadejuan.blogspot.com/
Re: Ficheros en Binario/hexadecimal
« Respuesta #4 en: Domingo 19 de Octubre de 2008, 17:41 »
0
Tendrias que probar con lo siguiente:

Código: Pascal
  1.  
  2. Var
  3.    archivo: file of text;
  4.  
  5.  

eso deberia abrir cualquier archivo, ahora estoy un tanto ocupado con la facu, asi que depues vere eso que dices sobre el EOF, mandame el codigo de lo que tengas y yo te lo reviso y debugueo, por que si no es muy dificil, vamos a los hechos!

  :good:
« última modificación: Lunes 20 de Octubre de 2008, 17:32 por eternity »


m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Ficheros en Binario/hexadecimal
« Respuesta #5 en: Domingo 19 de Octubre de 2008, 17:42 »
0
Cita de: "SergioyoPlayer"
porque el EOF salta antes de acabar

Eso es porque usas EOF como condición de final de fichero y no deberías. Tendrías que usar el tamaño del fichero y compararlo con tu puntero de fichero.

SergioyoPlayer

  • Miembro activo
  • **
  • Mensajes: 31
    • Ver Perfil
Re: Ficheros en Binario/hexadecimal
« Respuesta #6 en: Domingo 19 de Octubre de 2008, 21:31 »
0
Te refieres al procedimiento BLOCKREAD??

Jum... Lo estuve mirando. Lo intentaré con eso ^^

Pero aún así, me gustaría oír la propuesta de eternity (por si acaso me falla esta y el error está en la interpretación :s)

Pero muchas gracias!! Me pongo a ello  :hitcomp:

eternity

  • Miembro activo
  • **
  • Mensajes: 78
  • Nacionalidad: ar
    • Ver Perfil
    • http://lameriendadejuan.blogspot.com/
Re: Ficheros en Binario/hexadecimal
« Respuesta #7 en: Domingo 19 de Octubre de 2008, 22:22 »
0
bueno aca esta el esqueleto de lo tenes que hacer hay algunos comentarios sobre algunas cosas, fijate que use el blockread que antes mencionabas, es por que siempre quiero leer tantos caracteres como quiera.

Código: Pascal
  1. program visor;
  2. const
  3.   MaxPalabra = 16;
  4. var
  5.   archivo: file; {archivo sin tipo}
  6.   path: string;
  7.   palabra: array [1..MaxPalabra] of char; {use esto por que mi compilador se quejaba con un string}
  8.   i: byte;
  9.   leidos: integer;
  10.   linea: longint;
  11. begin
  12.   write('ingrese la dir del archivo: '); readln(path);
  13.   assign(archivo, path); {asocio el archivo a la dir}
  14.   reset(archivo, 1); {lo prepara para escritura, el 1 es por que leeremos bytes}
  15.   {aca faltan los controladores para saber si el archivo existe o no}
  16.  
  17.   linea := 1;
  18.   while not(EOF(archivo)) do
  19.    begin
  20.      writeln;
  21.      blockread(archivo, palabra, sizeof(palabra), leidos);
  22.      write(linea, ' | '); {aca iria el numero de linea de la forma FFFF FFFF}
  23.      linea := linea + 1;
  24.      for i := 1 to MaxPalabra do
  25.       write(palabra[i], ' ');{aca iria tu funcion de hexadecimal es}
  26.      write('| ',palabra, ' |');
  27.    end;
  28.   readln;
  29.   close(archivo);
  30. end.
  31.  
  32.  

luego tendrias que fijarte que algunos cuando llegan a la mitad ponen un guion o separador no es mas que un simpre if pero te lo dejo a vos, y ademas tomate el trabajo de que la cadena (un buffer) palabra, inicialice simpre por que si en la ultima lectura antes del EOF lees menos de MaxPalabras podrian quedarte valores con "basura" no contemple esto, pero esa es tu responsabilidad, que la fuerza te acompañe joven padawan!

 :good:


SergioyoPlayer

  • Miembro activo
  • **
  • Mensajes: 31
    • Ver Perfil
Re: Ficheros en Binario/hexadecimal
« Respuesta #8 en: Lunes 20 de Octubre de 2008, 23:53 »
0
Muchas gracias por las sugerencias ^^

Ya hice entre ayer y hoy toda la declaración de tipos y funciones del binario y hexadecimal (a mi manera), y conseguí leer correctamente cualquier tipo de fichero del disco duro, y representar los bytes en binario, hexadecima, numérico y carácter ^^

Una cosilla a anotar: si en vez de INTEGER, declaras WORD, en este caso podrás contar el doble de datos. Y si en vez de LONGINT utilizas CARDINAL, igual :)  (en su momento me empollé la documentación que trae FPC jeje).

Gracias de nuevo :)   :lol:  :)  :)

eternity

  • Miembro activo
  • **
  • Mensajes: 78
  • Nacionalidad: ar
    • Ver Perfil
    • http://lameriendadejuan.blogspot.com/
Re: Ficheros en Binario/hexadecimal
« Respuesta #9 en: Lunes 20 de Octubre de 2008, 23:58 »
0
Genial! cuando lo tengas listo compartelo con la comudidad!

 :beer: