Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Interpretar archivo como numero entero

Estas en el tema de Interpretar archivo como numero entero en el foro de C/C++ en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 09/06/2010, 18:31
 
Fecha de Ingreso: junio-2010
Mensajes: 2
Antigüedad: 14 años, 5 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.
  #2 (permalink)  
Antiguo 10/06/2010, 00:06
 
Fecha de Ingreso: junio-2010
Mensajes: 4
Antigüedad: 14 años, 5 meses
Puntos: 0
Respuesta: Interpretar archivo como numero entero

Si el contenido de tu archivo es del tipo "123456", puedes convertirlo a BigInteger con la funcion stringToBigInteger. Asegurate que el buffer solo contiene digitos decimales y termina en '\0'.
Espero que te sirva este ejemplo, no se lee un archivo, pero es lo mismo.

Código:
#include <iostream>
#include "BigIntegerLibrary.hh"

using namespace std;

int main(int argc, char *argv[])
{
    void *strnum = (void *)"31415926539";
    BigInteger i = stringToBigInteger((char *)strnum);
    string j = bigIntegerToString(i + 1);
    cout << i << " + 1 = " << j << endl;
    return 0;
}
  #3 (permalink)  
Antiguo 10/06/2010, 02:49
 
Fecha de Ingreso: junio-2010
Mensajes: 2
Antigüedad: 14 años, 5 meses
Puntos: 0
Respuesta: Interpretar archivo como numero entero

El contenido de mi archivo no van a ser numeros en ascii, el archivo que voy a leer puede ser de cualquier tipo. necesito convertir el binario de ese archivo a biginteger

Etiquetas: entero, numero
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:42.