#include #include /* Función leer_entero_16 * Recibe un entero de 16 bits en formato * little endian y lo devuelve como int. */ int leer_entero_16(FILE* f){ int entero; int a, b; a = getc(f); b = getc(f); entero = a; entero |= (b<<8); return entero; /* return getc(f) | (getc(f)<<8);*/ } /* * Función leer_entero_32 * Recibe un entero de 32 bits en formato * little endian y lo devuelve como int. */ int leer_entero_32(FILE* f){ int entero; entero = getc(f); // entero |= (getc(f)<<8); entero |= (getc(f)<<16); entero |= (getc(f)<<24); return entero; } /* entero = getc(f); entero 00000000 00000000 00000000 00000001 entero = entero | (getc(f)<<8) entero 00000000 00000000 00000000 00000001 | 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000001 . . . */ /* * Función leer_entero * Caso genérico de las funciones * leer_entero_16 y leer_entero_32 * que recibe el tamaño del entero en bytes. */ int leer_entero(FILE* f, int nbytes){ int i, entero=0; for (i=0;i> 8,f); } /* * Función escribir_entero_32 * Recibe un entero de 32 bits y un puntero a un archivo * y escribe al entero en el archivo en formato little endian. */ void escribir_entero_32(FILE* f, int entero){ putc(entero, f); putc(entero >> 8, f); putc(entero >> 16, f); putc(entero >> 24, f); } /* int a =1; 00000000000000000000000000000001 // represetnación binaria con 32 bits binaria Hex entero >> 0 -> 00000000000000000000000000000001 -> 00000000000000000000000000000001 -> char 00000001 01 entero >> 8 -> 00000000000000000000000000000001 -> XXXXXXXX000000000000000000000000 -> char 00000000 00 entero >> 16 -> 00000000000000000000000000000001 -> XXXXXXXXXXXXXXXX0000000000000000 -> char 00000000 00 entero >> 24-> 00000000000000000000000000000001 -> XXXXXXXXXXXXXXXXXXXXXXXX00000000 -> char 00000000 00 */ /* * Función escribir_entero en formato little endian * Casi genérico de las funciones * escribir_entero_16 y escribir_entero_32 * que recibe el tamaño den entero en bytes. */ void escribir_entero(FILE* f, int entero, int nbytes){ int i; for (i=0;i>8*i, f); } } int main(int argc, char* argv[]){ if (argc!=4){ printf("ERROR! Cantidad de argumentos inválida.\n"); exit(1); } FILE* f = NULL; f = fopen(argv[1], "wb"); if (f==NULL){ printf("ERROR! Nombre del archivo inválido.\n"); exit(1); } int a = atoi(argv[2]); int b = atoi(argv[3]); escribir_entero_32(f, a); escribir_entero_16(f, b); fclose(f); f = fopen(argv[1], "rb"); if (f==NULL){ printf("ERROR! Nombre del archivo inválido.\n"); exit(1); } int c = leer_entero_32(f); int d = leer_entero_16(f); fclose(f); printf("El primer entero ingresado es %d\n", c); printf("El segundo entero ingresado es %d\n", d); return 0; }