[gelöst]HEX Datei auslesen und ausgeben
-
Hallo
Ich wollte ein kleines Programm schreiben, welches eine Datei mit einem Inhalt wie diesem:11 AA 22 FF
ausließt und so ausgibt:
1 1 10 10 2 2 15 15
Allerdings bekomme ich die Meldung einer Segmentation Fault anstatt der Ausgabe.
Wäre froh wenn mir jemand meinen Fehler zeigen könnte.
Mein Quellcode#include <stdio.h> #include <stdlib.h> #include <string.h> int main(int argc,char *argv[]) { if(argc < 2){ printf("Usage: %s filename\n",argv[0]); return EXIT_FAILURE; } FILE* datei; datei= fopen(argv[1],"r"); int c; if(datei != NULL) { while( (c=fgetc(datei)) != EOF){ if(c == ' ') continue; char y[5]; strcpy(y,(const char*)c); long int x = strtol(y, NULL, 16); printf("%l\n",x); } }else { printf("Konnte Datei nicht finden bzw. öffnen!\n"); return EXIT_FAILURE; } return EXIT_SUCCESS; }
-
strcpy(y,(const char*)c);
Was soll das denn werden?
-
Das war nur ein Versuch zur Fehlerbehebung.
So hats auch nicht funktioniert:#include <stdio.h> #include <stdlib.h> #include <string.h> int main(int argc,char *argv[]) { if(argc < 2){ printf("Usage: %s filename\n",argv[0]); return EXIT_FAILURE; } FILE* datei; datei= fopen(argv[1],"r"); int c; if(datei != NULL) { while( (c=fgetc(datei)) != EOF){ if(c == ' ') continue; long int x = strtol(c, NULL, 16); printf("%l\n",x); } }else { printf("Konnte Datei nicht finden bzw. öffnen!\n"); return EXIT_FAILURE; } return EXIT_SUCCESS; }
-
http://www.cplusplus.com/reference/cstdio/scanf/
Aber unbedingt nochmal Zeichenketten angucken. Die brauchst du hier zwar überhaupt gar nicht, aber das was du in deinem Programm versuchst ist echt böse.
Außerdem hast du anscheinend BBCode abgeschaltet, darum sehen deine Beiträge völlig unformatiert aus. Guck mal in deinem Profil, da gibt es eine Option "BBCode immer aktivieren", die du anscheinend deaktiviert hast.
-
Wie Bashar schon gesagt hat machst du das mit der Zeichenkette völlig falsch. "strcpy" kopiert einen string, statt der adresse eines strings gibst du ihm den wert des chars als adresse, hier 239. ich glaube du hast "(unsigned char*)&c" gesucht, aber das wäre genauso falsch.
Am einfachsten ist es wenn du direkt mit den Zeichen rechnest:
while( (c=fgetc(datei)) != EOF) { if(c == ' ') continue; if(c>='0' && c<='9') // ist bereits eine ziffer { printf("%c\n",c); } else { printf("1%c\n",c-'A'+'0'); //Hex-Ziffer in Dezimal umrechnen, 10-15 } }
-
Danke für die schnelle Hilfe.
if(c == ' ') continue; if(c>='0' && c<='9') // ist bereits eine ziffer { printf("%c\n",c); } else { printf("1%c\n",c-'A'+'0'); //Hex-Ziffer in Dezimal umrechnen, 10-15 }
So funktioniert es wunderbar!!
-
DarkShadow44 schrieb:
Am einfachsten ist es wenn du direkt mit den Zeichen rechnest:
while( (c=fgetc(datei)) != EOF) { if(c == ' ') continue; if(c>='0' && c<='9') // ist bereits eine ziffer { printf("%c\n",c); } else { printf("1%c\n",c-'A'+'0'); //Hex-Ziffer in Dezimal umrechnen, 10-15 } }
Ich hatte doch extra scanf verlinkt (Link oben korrigiert), damit das Rad nicht zum Milliardsten Male neu erfunden werden muss:
#include <stdio.h> int main() { int digit; while (scanf("%1x", &digit) == 1) printf("%i\n", digit); return 0; }
12 Zeilen verwundener Kontrollstrukturen -> einfacher Zweizeiler.