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.