Hola bs ts. Como recien me estoy iniciando en programacion, estoy intentano construir un programa que muestre datos en formato hex, luego que con una funcion me permita elegir un parametro a buscar y finalmente lo ordene como primer elemento de la una cadena, segun el parametro encontrado.
Con el codigo adjunto llegue hasta desplegar los datos en formato hex....pero no logro armar una sintaxis para crear las funciones que permitan realizar el resto de las consignas.
Desde ya muchas grs...por ayudarme u orientarme..
/*
/*Programa que despliega cualquier archivo binario o de txt. Para esto la fun "main"
tiene dos argumentos. Con esta función se puede introducir argumentos al ejecutar
el programa.
El primer argumento de main es "argc", es el nro de cadenas que contiene la linea
de comandos. las cadenas se almacenan en el segundo argu (argv)
El segundo argumento de main es "argv", es un array.
Si el nro de argumentos es menor que 2, el programa termina informando la forma
de utilizarlo.
Con este programa, se puede explorar caulquier tipo de archivo.
*/
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <ctype.h>
void muestra (char *nom);
int main(char argc,char **argv)
{
if (argc<2)
{
printf("uso: ver archivo\n");
getch();
exit(1);
}
else
{
muestra(argv[1]);
}
}
/* La func "muestra" lee y despliega el archivo. Los archivos son desplegados
en reglones de 16 bytes en formato hexadecimal y en su equivalente ASCII.
*/
void muestra(char *nom)
{
FILE *f; /*Creamos un puntero FILE a f*/
unsigned char ch; /*Declar variable ch, tipo caracter y sin signo*/
char a [16] = {0}; /*Definimos un vector a, tipo char con 16 elementos y lo inicializamos en 0*/
int fil=0, col=0, k; /*declaramos e inici var fil, col en 0 y sin inicializar var k para control de inicio de los FOR*/
f = fopen(nom, "r"); /*Abrimos fichero en modo lectura y lo cargamos en var f*/
if (f==NULL) /*Este if es para verificar si se puede abrir bien el fichero.*/
{
printf("NO existe el archivo: %s", nom);
getch();
exit(1);
}
else /*Si todo esta ok continamos*/
{
ch= fgetc(f); /*cargamos en puntero ch, caracter por caracter los datos del file que estan almacenados en f*/
while (!feof(f)) /*Mientras el caracter no sea FIN DE LINEA, hacemos*/
{
printf("%02x ",ch); /*Desplegamos en formato hex con dos bytes de formato, los caracteres que estan en ch */
a[col]= ch; /*en el vector a, vamos controlando la entrada de los datos que estan en ch y que van ingresando en la col "que arman la columna"*/
col++; /*vamos incrementando columna*/
if (col==16) /*Condicion, cuando col llegue a 16 muestras*/
{
fil++; /*Con el bucle, comenzamos a incrementar filas*/
for (k=0;k<16;k++) /*Hacemos recorrer el bucle con la var de control k desde 0 a 15 veces*/
if (isprint(a[k])) /* SI La func "isprint" encuentra que un elemento del vector a es ASCII
IMPRIME el caracter almacenado en ese lugar*/
printf("%c",a[k]);
else /*SINO, IMPRIME un puntito*/
printf(".");
col= 0; /*Ponemos valor 0 la var col*/
printf("\n"); /*le damos un fin linea*/
}
if (fil==10) /*SI cuando fil llegue a 10*/
{
printf("Presione cualquier tecla..."); /*Le decimos al user que apriete cualquier tecla para
continuar*/
getch();
printf("\n"); /*le damos un fin de linea*/
fil = 0; /* ponemos var fil en 0*/
}
ch = fgetc(f); /*OTRA vez cargamos en puntero ch, caracter por caracter los datos del file que estan almacenados en f*/
}
}
fil= col; /*lo que esta en var col lo pasamos a var fil o sea 16*/
while (fil<16) /*MIENTRAS var fil sea menor que 16..*/
{
printf(" "); /*imprimos espacios en blanco e incrementamos col*/
col++;
}
for (k=0;k<1;k++)
if (isprint(a[k]))
printf("%c", a[k]);
else
printf(".");
printf("\nPresione cualquier tecla...");
getch();
}