Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 02-10-2005
Avatar de alt126
alt126 alt126 is offline
Miembro
 
Registrado: dic 2004
Posts: 171
Poder: 20
alt126 Va por buen camino
Unas cuantas cosas de archivos y hexadecimal.

Estoy haciendo un editor de ficheros de un juego bastante antiguo...PCFutbol 4.0, supongo que casi todos sabeis cual es.

Bueno, la cosa es que esta casi terminado pero tengo problemas al leer y escribir directamente codigo hexadecimal sobre un archivo.

Es decir, los archivos que leo y que escribo tienen codigo hexadecimal, pero estan en modo texto. Entonces para leerlos lo que hago es leer de un archivo un caracter y guardarlo en una variable (int), con lo que ya tengo su codigo hexadecimal asociado. Espero explicarme bien. Por ejemplo:

Modo texto del archivo: Copyright (c)1995 Dinamic Multimedia....

Codigo hexadecimal asociado: 436F7079726967687420286329313939352044696E616D6963204D756C74696D65646961

Bueno la cosa es que si hago eso...no me lee todo el archivo, encuentra algun caracter, que lo identifica como fin de archivo, con lo que termina antes de tiempo...¿?¿?¿?...alguna idea de como arreglar eso?

Despues, a la hora de escribir, al pasar de hexadecimal a cadena y pasarla al archivo...me sucede que al escribir este par hexadecimal "0A"...que corresponde al caracter '\n', o en formato entero 10...en vez de ponerme 1 caracter (como seria lo logico), me pone 2...es decir...escribe en el archivo..."0D0A"...con lo que me tiene loco!!

Y ya por ultimo, pregunta tonta pero bueno...las imagenes del juego estan almacenadas en archivos con extension dfg...parece ser que es algun tipo de bmp, pero modificado...alguien sabria como poder editarlo??

Gracias por todo

Un saludo

Antonio
Responder Con Cita
  #2  
Antiguo 02-10-2005
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Bueno en cuanto al retorno de carro es habitual que vaya acompañado por una alimentación de línea por eso siempre van juntos los dos códigos
0A ----- Line Feed (Alimentación de línea)
0D ----- Carriage Return (Retorno de carro()
De hecho la tecla enter produce esos códigos precisamente.

Puedes probarlo:
Esto es una prueba <Enter>
Guardálo con el nombre que desees por ejemplo prueba:
vete al DOS
Debug prueba
D <enter>
Y ahora veras en hexadecimal todo lo escrito y al final 0AOD

Para abandonar deBug pulsa Q y luego Enter

En cuanto al otro problema porque no lees el archivo entero y no caracter a caracter lo guardas en una variable o donde creas oportuno y luego vas tomando de 2 en 2 los códigos y los pasas a decimal o a lo que corresponda.

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.

Última edición por marcoszorrilla fecha: 02-10-2005 a las 12:54:24.
Responder Con Cita
  #3  
Antiguo 02-10-2005
Avatar de alt126
alt126 alt126 is offline
Miembro
 
Registrado: dic 2004
Posts: 171
Poder: 20
alt126 Va por buen camino
Y como cargo un archivo entero en una cadena???

pq yo lo que hago es abrir el archivo (fopen), ir copiando con (fget o fgets), y luego cerrar el archivo (fclose).

Gracias

Un saludo

Antonio
Responder Con Cita
  #4  
Antiguo 03-10-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Cita:
Empezado por alt126
Y como cargo un archivo entero en una cadena???
Se me ocurren estas dos maneras: no dudo que existan otras mejores.


Código:
 void __fastcall TForm1::Button1Click(TObject *Sender)
 {
   AnsiString archivo = "C:\\archivo.txt";
   TStringList *temporal = new TStringList();
   try
   {
 	temporal->LoadFromFile(archivo);
 	ShowMessage(temporal->Text);
   }
   __finally
   {
 	temporal->Free();
   }
 }
Código:
 void __fastcall TForm1::Button2Click(TObject *Sender)
 {
   AnsiString archivo = "C:\\archivo.txt";
   TFileStream *fs = new TFileStream(archivo, fmOpenRead);
   TStringStream *ss = new TStringStream("");
   try
   {
 	ss->CopyFrom(fs, 0);
 	ShowMessage(ss->DataString);
   }
   __finally
   {
 	fs->Free();
 	ss->Free();
   }
 }
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #5  
Antiguo 03-10-2005
Avatar de ppb
[ppb] ppb is offline
Miembro Premium
 
Registrado: jun 2005
Ubicación: España
Posts: 109
Poder: 19
ppb Va por buen camino
Aunque no entiendo muy bien lo que te pasa , para no tener
problemas con los retorno de carro ( 0D0A ) maneja el fichero
en modo binario no en modo texto.
Responder Con Cita
  #6  
Antiguo 03-10-2005
Avatar de alt126
alt126 alt126 is offline
Miembro
 
Registrado: dic 2004
Posts: 171
Poder: 20
alt126 Va por buen camino
Pues va a ser que no....

...vamos a ver he probado lo de cargar el archivo de una vez con el Tstringlist, pero nada...

el archivo es este: archivo

Lo he puesto con extension .doc para poder subirlo. Si lo habris con un editor hexadecimal, podreis verlo perfectamente. Yo lo que quiero es obtener en una cadena todo el codigo hexadecimal. Porque hasta ahora para poder trabajar con el, lo que tengo que hacer es abrir el archivo con un editor hexadecimal, seleccionar todo el codigo y copiarlo a un archivo de texto.

La version hexadecimal de ese archivo es: archivohex

Asi que si alguien pudiera decirme como leer directamente el archivo y obtener ese codigo hexadecimal en una cadena y luego volver a pasarlo a otro archivo....

Muchas Gracias

Un saludo

Antonio
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 02:00:31.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi