Autor Tema: funcion en C para Buscar y Ordenar datos en formato hexadecimal lenguajeC  (Leído 2437 veces)

Negro2901

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 2
    • Ver Perfil
Hola bs ds. Estoy intentando crear un programa que abra un archivo.txt en formato hex. Luego me permita buscar un dato x y a partir de este parametro ordenarlo al comienzo de linea.

Llegué hasta abrir un archivo y recorrerlo mostrando en formato hex, pero luego estoy muy trabado en alguna funcion de buscar y ordenarlo.

EL codigo es el siguiente:

Código: [Seleccionar]
#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;
    unsigned char ch;
    char a [16] = {0};
    int i=0, j=0, k;
    f = fopen(nom, "r");
    if (f==NULL)
    {
        printf("NO existe el archivo: %s", nom);
        getch();
        exit(1);
    }
    else
    {
        ch= fgetc(f);
        while (!feof(f))
        {
            printf("%02x ",ch); /*Esta sentencia despliega en formato hexa. El 0
  se utiliza para rellenar el campo de 0Žs en lugar
  de usar espacios */
            a[i]= ch;
            i++;
            if (i==16)
            {
                j++;
                for (k=0;k<16;k++)
                    if (isprint(a[k])) /*La func "isprint" se utiliza para desplegar
solo caracteres imprimibles ASCII*/
                    printf("%c",a[k]);
                    else
                        printf(".");
                    i= 0;
                    printf("\n");
            }
            if (j==24)
            {
                printf("Presione cualquier tecla...");
                getch();
                printf("\n");
                j = 0;
             }
             ch = fgetc(f);
        }
    }
    j= i;
    while (j<16)
    {
        printf("   ");
        j++;
    }
    for (k=0;k<1;k++)
        if (isprint(a[k]))
        printf("%c", a[k]);
        else
            printf(".");
        printf("\nPresione cualquier tecla...");
        getch();
}
« Última modificación: 07 de Agosto 2016, 15:36 por Alex Rodríguez »

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Re:funcion Buscar y Ordenar dato cadena caracteres
« Respuesta #1 en: 01 de Agosto 2016, 22:02 »
Hola Negro2901

Para escribir en los foros es importante seguir las indicaciones que se dan en https://www.aprenderaprogramar.com/foros/index.php?topic=1460.0 sobre cómo escribir código, cómo poner título a los temas, etc. Si no incluyes correctamente el código será difícil que obtengas respuesta. También es importante que indiques en qué lenguajes estás trabajando.

Antes de publicar una consulta es importante que pulses el botón "Previsualizar" y compruebes que todo se muestra correctamente.

En este caso también sería importante que incluyeras un ejemplo

Saludos

Negro2901

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 2
    • Ver Perfil
funcion en C para Buscar y Ordenar datos en formato hex.
« Respuesta #2 en: 04 de Agosto 2016, 14:58 »
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..



Código: [Seleccionar]
/*
/*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();
}

« Última modificación: 07 de Agosto 2016, 15:33 por Alex Rodríguez »

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".