Olá pessoal mais uma vez eu aqui pedindo ajuda..
É o seguinte estou desenvolvendo um aplicativo e preciso visualizar os arquivo que usuário está editando em Hex e ASCII, assim com na imagem veja abaixo:
Exatamente como na imagem só que em um memo ou qualquer outro componente. Achei este código na net mas não estou conseguido adapta-lo para abrir em um memo. Se alguém pude me ajudar... Agradeço.
# include <cstdlib>
# include <iostream>
# include <iomanip>
# include <fstream>
# include <ctime>
using namespace std;
int main ( long argc, char *argv[] );
void handle ( char file_in_name[] );
void timestamp ( void );
int main ( long argc, char *argv[] )
{
char file_in_name[80];
int i;
bool VERBOSE = true;
if ( VERBOSE )
{
timestamp ( );
cout << "\n";
cout << "HEXDUMP:\n";
cout << " C++ version\n";
cout << "\n";
cout << " Compiled on " << __DATE__ << " at " << __TIME__ << ".\n";
cout << "\n";
cout << " Produce a hexadecimal dump of a file.\n";
}
//
// If the input file was not specified, get it now.
//
if ( argc <= 1 )
{
cout << "\n";
cout << "HEXDUMP:\n";
cout << " Please enter the name of a file to be analyzed.\n";
cin.getline ( file_in_name, sizeof ( file_in_name ) );
handle ( file_in_name );
}
//
// Otherwise, get the file(s) from the argument list.
//
else
{
for ( i = 1 ; i < argc ; ++i )
{
handle ( argv[i] );
}
}
if ( VERBOSE )
{
cout << "\n";
cout << "HEXDUMP:\n";
cout << " Normal end of execution.\n";
cout << "\n";
timestamp ( );
}
system("pause");
return 0;
}
void handle ( char file_in_name[] )
{
long int addr;
unsigned char buffer[20];
long int cnt;
long int cnt2;
ifstream file_in;
long n;
//
// Open the file.
//
file_in.open ( file_in_name );
if ( !file_in )
{
cout << "\n";
cout << "HANDLE - Fatal error!\n";
cout << " Cannot open \"" << file_in_name << "\"\n";
return;
}
cout << "\n";
cout << "Hexdump of \"" << file_in_name << "\":\n";
cout << "\n";
cout <<
"Address Hexadecimal values Printable\n";
cout <<
"------- ----------------------------------------------- -------------\n";
cout << "\n";
//
// Dump the file contents.
//
addr = 0;
while ( 1 )
{
file_in.read ( ( char * ) buffer, 16 );
cnt = file_in.gcount();
if ( cnt <= 0 )
{
break;
}
//
// Print the address in decimal and hexadecimal.
//
cout << setw(7) << ( int ) addr << " ";
addr = addr + 16;
//
// Print 16 data items, in pairs, in hexadecimal.
//
cnt2 = 0;
for ( n = 0; n < 16; n++ )
{
cnt2 = cnt2 + 1;
if ( cnt2 <= cnt )
{
cout << hex << setw(2) << setfill ( '0' ) << ( int ) buffer[n];
}
else
{
cout << " ";
}
cout << " ";
}
cout << setfill ( ' ' );
//
// Print the printable characters, or a period if unprintable.
//
cout << " ";
cnt2 = 0;
for ( n = 0; n < 16; n++ )
{
cnt2 = cnt2 + 1;
if ( cnt2 <= cnt )
{
if ( buffer[n] < 32 || 126 < buffer[n] )
{
cout << '.';
}
else
{
cout << buffer[n];
}
}
}
cout << "\n";
cout << dec;
if ( file_in.eof ( ) )
{
break;
}
}
file_in.close ( );
return;
}
void timestamp ( void )
{
# define TIME_SIZE 40
static char time_buffer[TIME_SIZE];
const struct tm *tm;
size_t len;
time_t now;
now = time ( NULL );
tm = localtime ( &now );
len = strftime ( time_buffer, TIME_SIZE, "%d %B %Y %I:%M:%S %p", tm );
cout << time_buffer << "\n";
return;
# undef TIME_SIZE
}
Pergunta
cgm2k7
Olá pessoal mais uma vez eu aqui pedindo ajuda..
É o seguinte estou desenvolvendo um aplicativo e preciso visualizar os arquivo que usuário está editando em Hex e ASCII, assim com na imagem veja abaixo:
Exatamente como na imagem só que em um memo ou qualquer outro componente. Achei este código na net mas não estou conseguido adapta-lo para abrir em um memo. Se alguém pude me ajudar... Agradeço.
Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.