Ver Mensaje Individual
  #1 (permalink)  
Antiguo 09/06/2010, 18:31
Nanoc6
 
Fecha de Ingreso: junio-2010
Mensajes: 2
Antigüedad: 13 años, 10 meses
Puntos: 0
Interpretar archivo como numero entero

Hola, buenas.

Soy nuevo en este foro, vengo de otro donde no consigo soluciones y me gustaria probar en otros sitios.

Veamos, un ordenador trabaja unicamente con sistema binario, el sistema binario es un sistema de numeracion, entonces, mi objetivo es cargar un archivo de cualquier tipo de forma binaria y interpretarlo como un UNICO numero ENTERO de tal modo, que pueda realizar sencillas operaciones matematicas con el.

No creo estar preguntando sobre algo del otro mundo.

En teoria no hay ningun problema, leer el archivo, guardarlo entero en un array y luego convertirlo a un tipo numerico.

El problema, las variables numericas que proporciona C++ son de tamaño muy reducido (64 bits tengo entendido la mas grande), y yo necesito poder cargar ficheros de un tamaño ilimitado.
Con ilimitado me encuentro con el problema de que si necesito interpretar el numero como un UNICO numero, necesitare cargarlo entero en memoria, lo cual imagino que supondra que el limite estara en la memoria de la que disponga el sistema.

Intento usar una clase llamada BigInteger que en teoria me permite numeros de tamaño ilimitado.

Llegado a este punto, muestro el codigo que tengo hasta el momento

Código:
#include "BigIntegerLibrary.hh"
#include <stdio.h>
#include <iostream>
#include <windows.h>
#include <fstream.h>
int main()
     int tama;
     BigInteger data[1];
     tama = FileSize(fpath);
     ifstream myFile(fpath, ios::in | ios::binary);
     if(myFile.good() != 1)
     {
      myFile.close();
      return 1;
     }
     char buffer[tama];
     myFile.read (buffer,tama);
     myFile.close();
     MoveMemory(data,buffer,tama);
     delete buffer;
     BigInteger data2[1];
     int data3;
     data3 = 1;
     data2[0] = data[0] + data3;
     delete data;
     char fbuffer[sizeof(data2)];
     MoveMemory(fbuffer,data2,sizeof(data2));
     delete data2;
     ofstream oFile (opath, ios::out | ios::binary);
     if(oFile.good() != 1)
     {
        oFile.close();
        return 1;
     }
     oFile.write (fbuffer,sizeof(fbuffer));
     oFile.close();
     delete fbuffer;
     return 0;
En mi opinion es un codigo muy "sucio", el codigo tal cual esta hay, no compila, da errores del linker para las biginteger, pero, he conseguido compilar antes con esa libreria, los errores aparecieron despues, asi que deduzco que puede ser por alguna funcion que uso (como el signo + que tiene el codigo por hay).

Por favor, pido ayuda por minima que sea, es un proyecto muy interesante teoricamente que intento sacar a la practica.

Muchisimas gracias.