Hex-Datei Auslesen in C-Programmierung?
Ich hatte eine Frage:
Ich Schreibe ein c-Programm, dass funktioniert ähnlich wie ein hex-editor. Ich möchte in einer Datei und zeigen Sie die entsprechenden hexadezimalen Werte. Zum Beispiel, sagen, ich hatte die text-Datei "helloworld.txt" das hatte einfach den Text "Hello World!" in es, ich will angeben, um das Programm zu nehmen, die Datei, Lesen der hexadezimalen Werte (einmal die Datei ist eine einfache .txt-Datei und nicht eine binäre Datei) und speichern Sie in einem array für später.
Hier ist was ich habe, so weit:
#include <stdio.h>
#include <stdlib.h>
int main()
{
char ch, file_name[25];
FILE *fp;
printf("Enter the name of file you wish to see\n");
gets(file_name);
fp = fopen(file_name,"rb"); //read binary mode
if( fp == NULL ) //error checking
{
perror("Error while opening the file.\n");
exit(EXIT_FAILURE);
}
printf("The contents of %s file are :\n", file_name);
while( ( ch = fgetc(fp) ) != EOF )
printf("%c",ch);
fclose(fp);
return 0;
}
Wie Sie sehen können ist dies wirklich nur eine einfache Datei, read-und print-Inhalte. Das problem ist jedoch, dass, obwohl ich in der "read binary" - Modus, es wird nicht geben Sie mir die hexadezimalen Werte der text-Datei.
Wie kann ich Struktur in diesem Programm, so dass es liest die hexadezimalen Werte eines standard-text-Datei und entweder (a) legt Sie in einem array (was ich denke, sollte einfach genug sein mit einer for-Schleife) oder (b), druckt Sie aus, um den Bildschirm?
Ich habe versucht, zu googeln, um zu sehen, wenn andere versuchten, das gleiche zu tun, aber die Leute waren entweder bereits das Lesen aus einer Binärdatei oder schon hexadezimalen Werte in der Datei. Ich habe nur-text in einem regelmäßigen .txt-Datei, aber ich möchte die hexadezimalen Werte darunter (in anderen Worten eine Art hexdump der Datei). Ich hoffe, dass meine Frage und was ich versuche zu tun, macht Sinn. Wenn Sie Fragen haben, bitte fühlen Sie sich frei, mich wissen zu lassen! Vielen Dank im Voraus für Ihre Hilfe! Ich Schätze es wirklich tun!
- Nie verwenden wird().
- Und...es ist nur eine Frage der Darstellung, Sie
printf("%c", ch);
, so erhalten Sie das char-format; gefälltprintf("%02X", ch);
erhalten Sie als hex-Wert.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht sicher, ob ich verstehe die Frage richtig, aber wäre das nicht der Fall sein (für option B) einfach mit
fseek()
-ftell()
-rewind()
block ist ein ziemlich standard-Weg zur Erlangung der Größe der Datei, die Sie zu Lesen; auf diese Weise können Sie die dynamische Zuordnung der Größe der Speicher-buffer genau die gleiche wie die Größe der Datei, nicht mehr und nicht weniger. Für die array-Frage, die Sie haben, um zu bemerken, dassbuffer
ist schon dein array! Es ist nur eine Frage der Darstellung: jedes element der Puffer Sie ein Zeichen haben, das ist, 8 bits, die die ASCII-Darstellung der Zeichen. Aber zur gleichen Zeit, können Sie sehen, dass diese 8 bit als 2 hexadezimale Zeichen (4 bits jedes) Fortsetzungprintf()
innerhalb der for-Schleife funktioniert, nur drucken Sie die array-Werte, ein element jedes mal, als hexadezimale zahlen und nicht in Zeichen. Wir hätten gedruckt als Ganzzahl (Basis 10) der zahlen statt, und so würde man etwas wie72 101 108 108 111
für "Hallo". Das einzige, was Sie wirklich verstehen müssen ist, dass Ihre Zeichen, dezimale zahlen, hexadezimale zahlen -Sie nennen es - sind bereits in diesembuffer
array seit dem moment, Sie Lesen die Datei von der Festplatte, von da an, es ist bis zu Ihnen, wie zu interpretieren die Daten.Sie sind so sehr nah.
Merke 2 Dinge:
1 - Verwendung von fgets() anstelle von gets().
2 - printf("%02X ",ch);
Natürlich nur Drucke auf stdout. Wenn Sie wollen, um das Ergebnis in
ein array könnte man so etwas wie
sprintf()
um Ihre Ausgabe in einige Puffer(s).Beispiel-Ausgabe: