Inahlt einer Datei byteweise ausgeben
-
Ich möchte ein Programm schreiben , das den Inahlt einer Datei byteweise ausgibt.
1. das Programm soll mit 2 Parametern wie folgt aufgerufen werden:
<name des Programms> -optionen <dateiname>
2. mögliche Optionen sind :
-h byteweise Ausgabe im hexadezimalen Format
-o " " oktalen " "
-d " "dezimalen" "3. Sofern die Anzahl der Parameter, die an das Programm uebergeben werden , nicht korrekt ist, soll eine Fehlermeldung ausgegeben únd das Programm abgebrochen werden!
Kann mir jemand helfen?
Danke im voraus!!!!!4. Es sollen jeweils 16 Bytes (getrennt durch ein Leerzeichen) pro Zeile ausgegeben werden!!!
-
das einlesen und ausgeben sollte kein problem sein:
int byte; FILE* datei = fopen( "abc.def", "rb" ); while( ( byte = fgetc( datei ) ) > 0 ) { printf( "hex: %x", byte ); printf( "oktal: %o", byte ); printf( "ascii-code: %d", byte ); } fclose( datei );
und der rest ist auch nicht mehr viel
-
Mach deine Hausaufgaben doch selber...
-
/*** FileDump.c ********************/ #include <stdio.h> #include <stdlib.h> #include <string.h> //Konstanten enum { ARG_PROG = 0, ARG_MODE, ARG_FILE, MAX_COLUMN = 16 }; enum { MODE_HEX = 0, MODE_OCT, MODE_DEC }; struct MODE { int base; //Basis des Zahlensystems int digits; //Anzahl auszugebender Stellen const char* option; //Optionsstring als Programmargument const char* name; //Name des Modus } MODI[] = { { 16, 2, "-h", "Hexadecimal" }, { 8, 3, "-o", "Octal" }, { 10, 3, "-d", "Decimal" } }; const char* USAGE = "Usage:\nFileDump [-{h|o|d}] file\nHexadecimal, octal or decimal dump of file"; //Ausgabe eines Bytes als Zahl-String void OutputByte(int byte, int base, int digits) { static int col = 0; char number[6], *start = number + strlen(strcpy(number, "000")); printf("%s%s", (col ? " " : "\n"), start + strlen(itoa(byte, start, base)) - digits); col = (col + 1) % MAX_COLUMN; } int main(int argc, char* argv[]) { FILE* file; int mode = -1, byte, test; //Modus finden for(test = MODE_HEX; test <= MODE_DEC; test++) if(!strcmp(argv[ARG_MODE], MODI[test].option)) mode = test; if((mode < 0) || (argc < 2) || (argc > 3)) return puts(USAGE), 1; //Datei oeffnen file = fopen(argv[ARG_FILE], "rb" ); if(!file) return printf("File not found: %s\n\n%s\n", argv[ARG_FILE], USAGE), 1; printf("%s file dump of %s:\n", MODI[mode].name, argv[ARG_FILE]); //Alle Bytes der Datei nacheinander ausgeben while((byte = fgetc(file)) != EOF) OutputByte(byte, MODI[mode].base, MODI[mode].digits); //Abschliessen fclose(file); printf("\n\nReady.\n"); return 0; }