Retomando la programación

Moderadores: Kravenbcn, largeroliker, fidelcastro, cerealkiller, pspCaracas, m0skit0, LnD, ka69, zacky06

Avatar de Usuario
largeroliker
Administrador
Administrador
Mensajes: 8286
Registrado: 03 Sep 2009, 09:46
PSN ID: larger0o
Gamertag Xbox Live: larger0o
Steam ID: larger0o
Twitter: larger0o
Ubicación: Málaga
Contactar:

Re: Retomando la programación

Mensaje por largeroliker »

Oka. Pero he cambiado los permisos y sigue exactamente igual, he ido manualmente como root a hacerlo, he activado la casilla de "Ejecutar como programa" pero no ejecuta NADA...incluso me llega a decir que no tengo ningún programa asociado 0o

PD: Arreglada la carga de archivos externos, ya he hecho para que el Eclipse los encuentre. Muchas gracias Yn$an€.
Imagen
Steam Deck · Xbox Series X · PS5 · Switch · PS Vita · WiiU · PS3 · new 3DS XL · Xbox 360 · PSP · PS2

Avatar de Usuario
largeroliker
Administrador
Administrador
Mensajes: 8286
Registrado: 03 Sep 2009, 09:46
PSN ID: larger0o
Gamertag Xbox Live: larger0o
Steam ID: larger0o
Twitter: larger0o
Ubicación: Málaga
Contactar:

Re: Retomando la programación

Mensaje por largeroliker »

Más de programación. He pasado de escribir el valor en pantalla a lo que realmente voy a hacer, que es copiarlo a otro archivo.

Ya estoy con el DOCUMENT de testeo. Éste empieza con una serie

Código: Seleccionar todo

DOC(espacio)(00 00 01 00 00 00 )SCUS99999


lo que en hexadecimal por completo es

Código: Seleccionar todo

44 4F 43 20 00 00 01 00 00 00 53 43 55 53 39 39 39 39 39


lo malo es que me vuelca únicamente DOC, ya que ese espacio y los valores nulos son los que joden el invento T.T

Código: Seleccionar todo

/*
 * extractor.cpp
 *
 *  Creado el: 16/03/2011
 *      Autor: largeroliker
 *  Veremos en qué queda esto.
 *  Por el momento vamos a intentar hacer un extractor de imágenes de DOCUMENT.DAT comunes.
 */
#include <iostream>
#include <fstream>
 using namespace std;
 char cadena[100];

int main()
{
   // Abrimos el archivo DOCUMENT.DAT
   ifstream f("DOCUMENT.DAT", ifstream::in| ifstream::binary);
   // Función de depuración. Si por cualquier motivo no lo encuentra devuelve error.
   if (!f)
   {
      cout << "fallo" << endl;
      return -1;
   }
   //Abrimos ahora el archivo de destino.
   ofstream f2;
   f2.open ("output", ofstream::out | ofstream::binary);
   // Leemos
   f >> cadena;
   // y pasamos al output
   f2 << cadena;
   // Y los cerramos
   f.close();
   f2.close();
return 0;
}
Imagen
Steam Deck · Xbox Series X · PS5 · Switch · PS Vita · WiiU · PS3 · new 3DS XL · Xbox 360 · PSP · PS2

Avatar de Usuario
Yn$an€
Desarrollador
Desarrollador
Mensajes: 258
Registrado: 11 Feb 2011, 21:44

Re: Retomando la programación

Mensaje por Yn$an€ »

El operador >> no te va a servir para tu propósito. Busca "manejo de archivos en modo binario", te aclarará el método que necesitas (ya he visto el cambio en el código, que conste). Tu método, es para manejo de cadenas. Se parará en cuanto se tope con el primer 0x00.
Creo que para empezar sería bueno que siguieras el consejo de m0skit0 y empezaras con código en c. Luego pasa a c++ (sólo lo de leer los archivos, no todo el programa).

En cuanto al ejecutable... Ni idea. Ponle una pausa al final y prueba (como más te guste, importa funciones de control, o más fácil, haz un scanf()), en serio.

La función de lectura si quieres te la doy directamente, pero créeme que no es tan fácil pillar todas las sutilezas que tiene el tema.

Y una cosa. Para este tipo de tareas, necesitas siempre conocer los formatos con los que se trabaja.

SLDS
... after all, we're all alike.

Avatar de Usuario
largeroliker
Administrador
Administrador
Mensajes: 8286
Registrado: 03 Sep 2009, 09:46
PSN ID: larger0o
Gamertag Xbox Live: larger0o
Steam ID: larger0o
Twitter: larger0o
Ubicación: Málaga
Contactar:

Re: Retomando la programación

Mensaje por largeroliker »

Yn$an€ escribió:El operador >> no te va a servir para tu propósito. Busca "manejo de archivos en modo binario", te aclarará el método que necesitas (ya he visto el cambio en el código, que conste). Tu método, es para manejo de cadenas. Se parará en cuanto se tope con el primer 0x00.
Creo que para empezar sería bueno que siguieras el consejo de m0skit0 y empezaras con código en c. Luego pasa a c++ (sólo lo de leer los archivos, no todo el programa).


La verdad es que puse modo binario porque texto está claro que no es, y es lo más parecido a hexadecimal que he encontrado. Si hay alguna forma de abrirlo como hexadecimal avisadme xD
Le echaré un vistazo a eso que comentas. Piensa que lo más avanzado que he aprendido es un inicio a arrays y registros...suponía esto más sencillo, pero voy a intentar llevarlo para alante lo mejor posible :D
Yn$an€ escribió:En cuanto al ejecutable... Ni idea. Ponle una pausa al final y prueba (como más te guste, importa funciones de control, o más fácil, haz un scanf()), en serio.


Ahora que he hecho el cambio y no muestra los datos sino que los vuelca...he visto que funcionaba sin yo saberlo xD

Yn$an€ escribió:La función de lectura si quieres te la doy directamente, pero créeme que no es tan fácil pillar todas las sutilezas que tiene el tema.


Hombre, las cosas hechas no me gustan, prefiero ir aprendiendo hasta llegar a ellas...aunque las pistas no hacen mal, no :P
Yn$an€ escribió:Y una cosa. Para este tipo de tareas, necesitas siempre conocer los formatos con los que se trabaja.


Um, a qué te refieres? Si te refieres al formato hexadecimal, ya tengo costumbre de trabajar con él, ya he hecho chapucillas por ahí...
Imagen
Steam Deck · Xbox Series X · PS5 · Switch · PS Vita · WiiU · PS3 · new 3DS XL · Xbox 360 · PSP · PS2

Avatar de Usuario
Yn$an€
Desarrollador
Desarrollador
Mensajes: 258
Registrado: 11 Feb 2011, 21:44

Re: Retomando la programación

Mensaje por Yn$an€ »

largeroliker escribió:La verdad es que puse modo binario porque texto está claro que no es, y es lo más parecido a hexadecimal que he encontrado. Si hay alguna forma de abrirlo como hexadecimal avisadme xD
Le echaré un vistazo a eso que comentas. Piensa que lo más avanzado que he aprendido es un inicio a arrays y registros...suponía esto más sencillo, pero voy a intentar llevarlo para alante lo mejor posible :D


A ver, da igual como lo ves. La codificación no cambia. Bianario, decimal o hexadecimal son representaciones abstractas del mismo concepto. Da igual a ese efecto en que modo lo abras. El operador >> se para en 0x00.

El método es read(). A ti te queda descubrir como funciona.

largeroliker escribió:Um, a qué te refieres? Si te refieres al formato hexadecimal, ya tengo costumbre de trabajar con él, ya he hecho chapucillas por ahí...


Me refiero al formato interno, si quieres a la estructura del archivo. Todos los archivos, o casi todis, presentan marcadores o estructuras específicas que sirven para manejarlos. En cierto modo es esencial.
... after all, we're all alike.

Avatar de Usuario
m0skit0
Administrador
Administrador
Mensajes: 5585
Registrado: 03 Sep 2009, 09:35
Ubicación: 0xdeadbeef

Re: Retomando la programación

Mensaje por m0skit0 »

Obvio que al darle doble click no veas nada, vice. ¿Qué quieres que se vea si no has puesto nada que se vea? :lol: El programa se ejecuta. Si quieres asegurarte dale a ejecutar en terminal, aunque así también se cerrará el terminal al acabar el programa.

Igualmente no me seas Windowsero, las cosas se prueban en el terminal, no con "doble click" :mrgreen:
Imagen

Avatar de Usuario
largeroliker
Administrador
Administrador
Mensajes: 8286
Registrado: 03 Sep 2009, 09:46
PSN ID: larger0o
Gamertag Xbox Live: larger0o
Steam ID: larger0o
Twitter: larger0o
Ubicación: Málaga
Contactar:

Re: Retomando la programación

Mensaje por largeroliker »

Yn$an€ escribió:
largeroliker escribió:La verdad es que puse modo binario porque texto está claro que no es, y es lo más parecido a hexadecimal que he encontrado. Si hay alguna forma de abrirlo como hexadecimal avisadme xD
Le echaré un vistazo a eso que comentas. Piensa que lo más avanzado que he aprendido es un inicio a arrays y registros...suponía esto más sencillo, pero voy a intentar llevarlo para alante lo mejor posible :D


A ver, da igual como lo ves. La codificación no cambia. Bianario, decimal o hexadecimal son representaciones abstractas del mismo concepto. Da igual a ese efecto en que modo lo abras. El operador >> se para en 0x00.

El método es read(). A ti te queda descubrir como funciona.


Ya he encontrado una instrucción para que lea algo más, ahora el espacio entra, los valores 0x00 no. Estoy en la búsqueda de un tipo que almacene estos valores, ya la expresión es tal que

Código: Seleccionar todo

f2.write(reinterpret_cast<char *>(&cadena),
            sizeof(unsigned));

con sizeof(char) me salía una D, con éste me sale DOC(espacio). El de lectura es el mismo, f.read.

Yn$an€ escribió:
largeroliker escribió:Um, a qué te refieres? Si te refieres al formato hexadecimal, ya tengo costumbre de trabajar con él, ya he hecho chapucillas por ahí...


Me refiero al formato interno, si quieres a la estructura del archivo. Todos los archivos, o casi todis, presentan marcadores o estructuras específicas que sirven para manejarlos. En cierto modo es esencial.


Ah, claro, la estructura de estos archivos es bastante simple según se ve hexadecimalmente. Se trata de una cabecera que incluye la ID del juego y que aquí se desecha, y un número de imágenes PNG "tal cual" una detrás de otra. La idea supongo que la habrás visto ya, es leer el archivo, desechar la cabecera, y empezar a copiar desde el comienzo de la imagen (PNG) hasta el comienzo de la siguiente, donde abre nuevo archivo, o hasta el final del documento.

m0skit0 escribió:Obvio que al darle doble click no veas nada, vice. ¿Qué quieres que se vea si no has puesto nada que se vea? :lol: El programa se ejecuta. Si quieres asegurarte dale a ejecutar en terminal, aunque así también se cerrará el terminal al acabar el programa.

Igualmente no me seas Windowsero, las cosas se prueban en el terminal, no con "doble click" :mrgreen:


En el mundo Windows cuando se ejecuta un archivito de éstos se abre una terminal para ello, creía que se comportaría igual :lol:



EDITO: Con siezeof(double) me saca ya 8 bytes, 0x00 incluidos :D
Creo que ya es hora de pensar en los bucles para abarcar todo el texto.
Imagen
Steam Deck · Xbox Series X · PS5 · Switch · PS Vita · WiiU · PS3 · new 3DS XL · Xbox 360 · PSP · PS2

Avatar de Usuario
Yn$an€
Desarrollador
Desarrollador
Mensajes: 258
Registrado: 11 Feb 2011, 21:44

Re: Retomando la programación

Mensaje por Yn$an€ »

Eeeeeeeeeeh, si, pero no hay que poner sizeof(xxxx), sino el tamaño de los datos que quieres leer.
... after all, we're all alike.

Avatar de Usuario
largeroliker
Administrador
Administrador
Mensajes: 8286
Registrado: 03 Sep 2009, 09:46
PSN ID: larger0o
Gamertag Xbox Live: larger0o
Steam ID: larger0o
Twitter: larger0o
Ubicación: Málaga
Contactar:

Re: Retomando la programación

Mensaje por largeroliker »

Ah genial, lo pongo en número normal (16) o en alguna otra notación (0x16, o del estilo)?
Imagen
Steam Deck · Xbox Series X · PS5 · Switch · PS Vita · WiiU · PS3 · new 3DS XL · Xbox 360 · PSP · PS2

Avatar de Usuario
Yn$an€
Desarrollador
Desarrollador
Mensajes: 258
Registrado: 11 Feb 2011, 21:44

Re: Retomando la programación

Mensaje por Yn$an€ »

Te repito, y piensalo, que las representaciones no significan nada. Pero te será más fácil en hex.
... after all, we're all alike.

Responder