Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Nanoc en 4 Junio 2010, 00:43 am



Título: Interpretar archivo como numero entero
Publicado por: Nanoc en 4 Junio 2010, 00:43 am
Hola, viendo que nadie es capaz de ayudarme en el lenguaje vb6, intentare hacerlo en C++. Comienzo explicando lo que necesito:

Cualquier fichero en un ordenador esta compuesto unicamente de bits, el sistema binario es un sistema de numeracion, es decir yo tendria que ser capaz de leer un archivo del disco duro y obtener en memoria un UNICO numero, soy consciente de que un archivo de varios megabytes podria contener un numero de longitud inmensa.

Lo que necesito es abrir un archivo, leerlo, y realizar una simple operacion matematica, en vb consegui hacerlo usando variables long o double y abriendo en archivo en modo binario, pero una variable double tiene un maximo de longitud y por supuesto a poco que pese el archivo la superas.

Para este problema creo que con los punteros de C se debe poder hacer sin problemas.

Alguien puede echarme una mano? Gracias.


Título: Re: Interpretar archivo como numero entero
Publicado por: SirLanceCC en 4 Junio 2010, 06:22 am
BUeno, en un unsigned long long int (que es el tipo de entero mas grande que conozco en C) podrías almacenar el entero de un archivo de 8 bytes (64bits) lo cual realmente es nada.

Realmente no veo el sentido de todo esto, puesto que si un archivo es un número binario enorme, y lo cargas en memoria tienes el identificador *unico* de cada archivo, pero en sí es el mismo archivo, solo que en memoria. Es decir, igual podrías hacer un fread() o algo así, y habría archivos que no quepan en tu memoria.

De todos modos, lo que deberías hacer para manejar números muy grandes es ocupar una base numérica muy grande, como 264, e implementar los algoritmos de la primaria. Revisa la numeración Maya (era base 20) y te darás más o menos una idea de lo que te quiero decir.


Título: Re: Interpretar archivo como numero entero
Publicado por: Lambda en 4 Junio 2010, 13:01 pm
Echale un ojo a esto.

http://mattmccutchen.net/bigint/

de igual manera no se para que puede servir hacer algo asi aparte de por curiosidad xD


Título: Re: Interpretar archivo como numero entero
Publicado por: Gallu en 4 Junio 2010, 13:39 pm
Me gustaría poder entender lo que quieres hacer con el archivo , lo que tengo claro es que quieres cargarlo en memoria completo , podrias usar un array para almacenarlo y hacer con él lo que necesitas , te lo has planteado ?


Título: Re: Interpretar archivo como numero entero
Publicado por: Eternal Idol en 4 Junio 2010, 14:03 pm
¿Estas tratando da calcular un hash (http://es.wikipedia.org/wiki/Hash)?


Título: Re: Interpretar archivo como numero entero
Publicado por: Nanoc en 4 Junio 2010, 21:10 pm
Citar
¿Estas tratando da calcular un hash?
Mmm... digamos que no coincide con la definicion de hash,pero es mas o menos algo parecido, lo unico que necesito es hacer una operacion matematica con un numero entero, si puedo hacerlo sin cargarlo de golpe en memoria bien, pero necesito que el archivo entero sea interpretado como un unico numero, por muy largo que sea.

Citar
De todos modos, lo que deberías hacer para manejar números muy grandes es ocupar una base numérica muy grande, como 264, e implementar los algoritmos de la primaria.

Me parece una bonita forma de cifrar un fichero, pero no me interesa el resultado.

Echale un ojo a esto.

http://mattmccutchen.net/bigint/

de igual manera no se para que puede servir hacer algo asi aparte de por curiosidad xD

Eso si parece que puede servirme, solo una duda, la limitacion usando esa clase esta en la cantidad de memoria fisica o virtual?

Creeme que yo si que tengo una muy buena idea, no es por curiosidad XD.

Si alguien tiene alguna idea (Eternal que se que esto se te da bien) sobre como podria evitar tener que cargar el fichero de golpe en memoria para saltarme esa limitacion, agradecida sera su sugerencia

Muchisimas gracias.

PD: Posteare el proyecto completo cuando consiga que funcione.

EI: juntando mensajes.

Tengo un problemilla de tipos XD
Código:
     int tama;
     BigInteger data;
     tama = FileSize(fpath);
     ifstream myFile(fpath, ios::in | ios::binary);
     char buffer[tama];
     myFile.read (buffer,tama);
     myFile.close();
     data = buffer;
     return 0;

El problema esta al pasar el valor del array al biginteger, he probado usando copymemory pero no me deja especificar un biginteger como direccion de destino, alguna idea?