Ver Mensaje Individual
  #1  
Antiguo 08-12-2013
andres_89 andres_89 is offline
Miembro
 
Registrado: dic 2013
Posts: 46
Reputación: 0
andres_89 Va por buen camino
Error con buffer

Buenas amigos, tengo un pequeño error al tratar de leer un ejecutable en hexadecimal, consigo leer la parte que quiero, pero al momento de volverlo a leer se va concatenando lo que leí al principio con lo que leo segundo, y lo que quisiera es que si vuelvo a leer me borre lo leído anteriormente, les dejo el código para ver donde cometo mi error:

Código:
 void file_hex()
{

    AnsiString str1,str2,hex,cadena_1,cadena_2,cadena;

    unsigned int length;
    unsigned char *buffer;
    char nombre_archivo[] = "prueba.exe";

    ifstream archivo(nombre_archivo, ios::binary);

    if(archivo.fail())
        cout << "Error al abrir el archivo " << nombre_archivo << endl;
    else
    {
        // obtener longitud del archivo
        archivo.seekg (0, ios::end);
        length = archivo.tellg();
        archivo.seekg (0, ios::beg);

        // obtener memoria para la variable
        buffer = new unsigned char [length];

        // leer datos como bloque
        archivo.read ((char*)(buffer),length);
        archivo.close();

        // imprimir cada posicion del buffer como hexadecimal
        for (unsigned int i = 200; i < 216; i++)
       //    for (unsigned int i = 384; i < 400; i++) //linea de codigo que solo quiero leer
        {
            if (buffer[i] < 16)
                {
                    str1.printf("0%X", buffer[i]);
                    strcat(cadena_1.c_str(),str1.c_str());
                }
            else
                {
                    str2.printf("%X", buffer[i]);
                    strcat(cadena_2.c_str(),str2.c_str());
                }
        }

         /*  cadena.c_str() -> se almacena toda la cadena hexadecimal


        hex = cadena.c_str();
        Form1->Edit1->Text = hex;

        delete[] buffer; // creo que acá esta el error, lo elimino pero igual se sigue quedando en el buffer.
    }
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   Edit1->Clear();//supuestamente borro la cadena mostrada en edit1.
   file_hex();
}
cuando lo ejecuto me muestra la cadena hexadecimal normal, pero cuando lo vuelvo a ejecutar, me devuelve la cadena + la cadena anterior, y asi se van concatenando mientras los voy ejecutando, lo cual no quiero, quiero que si vuelvo a ejecutar me borre la anterior y me muestre solo la actual cadena ejecutada, bueno espero me hayan entendido.
gracias por las respuestas.
Responder Con Cita