hexeditor unter unix schreiben
-
hi leutz habe zur zeit prakrikum und meine aufgabe ist für ne woche das ich nen hexeditor schreiben soll....
ein gerüst ist auch schon dar:
#include <stdio.h>
#include <string.h>void main()
{
char name[10]="test.txt", *pName=&name[0];
char zeichen[2]="", *pZeichen=zeichen;
int zaehler=0;
char zeichene[16]="", *pZeichene=zeichene;
int anzahl=0;FILE *fd;
fd=fopen(pName, "r");
anzahl=fread(pZeichen, 1, 1, fd);
while (anzahl !=0 )
{
strncpy(pZeichene, pZeichen, 1);
zaehler+=1;
pZeichene=&(zeichene[zaehler]);
anzahl=fread(pZeichen, 1, 1, fd);
if (zaehler == 16)
{
printf("0000 | %x %x %x %x %x %x %x %x %x %x %x %x %x %x %x %x | %s" , zeichene[0],
zeichene[1], zeichene[2], zeichene[3], zeichene[4], zeichene[5],zeichene[6], zeichene[7],
zeichene[8], zeichene[9], zeichene[10], zeichene[11], zeichene[12], zeichene[13],
zeichene[14], zeichene[15], zeichene);
}
}
fclose(fd);
}nur das problem ist er macht nach den 16 zeichen nicht weiter....vielleicht hat ja einer schonmal sowas gemacht und kann mir helfen wäre auf jedenfall sehr gut
-
Warum liest du "anzahl" aus der Datei? Der Editor macht nicht weiter, weil anzahl beim durchlauf wahrscheinlich 0 ist.
Übrigens ist void main falsch
-
Dieser Thread wurde von Moderator/in kingruedi aus dem Forum Linux/Unix in das Forum ANSI C verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
kingruedi schrieb:
Warum liest du "anzahl" aus der Datei? Der Editor macht nicht weiter, weil anzahl beim durchlauf wahrscheinlich 0 ist.
Übrigens ist void main falsch
In dem Falle müsste es int main() sein, oder ?
-
cHillb3rT schrieb:
kingruedi schrieb:
Warum liest du "anzahl" aus der Datei? Der Editor macht nicht weiter, weil anzahl beim durchlauf wahrscheinlich 0 ist.
Übrigens ist void main falsch
In dem Falle müsste es int main() sein, oder ?
bravo cHillb3rT! So ist es
-
habe es ja jetzt soweit hinbekommen.
muss nur noch die ne zeichenkonvertierung hinbekommen mit ispirn() aber das funzt net ganz.
hier mal der code:
#include <stdio.h>
#include <string.h>
#include <ctype.h>int main()
{
char name[10]="test.txt", *pName=&name[0];
char zeichen[2]="", *pZeichen=zeichen;
int zaehler=0;
char zeichene[16]="", *pZeichene=zeichene;
int anzahl=0;
int adress=0000;
int enof=0;FILE *fd;
fd=fopen(pName, "r");anzahl=fread(pZeichen, 1, 1, fd);
while (anzahl !=0 )
{
strncpy(pZeichene, pZeichen, 1);
zaehler+=1;
pZeichene=&(zeichene[zaehler]);
if (zaehler == 16)
{
printf("%.4x | %.2x %.2x %.2x %.2x %.2x %.2x %.2x %.2x %.2x %.2x %.2x %.2x
%.2x %.2x %.2x %.2x | %s\n", adress, zeichene[0], zeichene[1],
zeichene[2], zeichene[3], zeichene[4], zeichene[5],zeichene[6],
zeichene[7], zeichene[8], zeichene[9], zeichene[10],
zeichene[11], zeichene[12], zeichene[13], zeichene[14],
zeichene[15], zeichene);
zaehler=0;
adress+=16;
pZeichene=zeichene;
strncpy(zeichene, " ", 16);
}
anzahl=fread(pZeichen, 1, 1, fd);
}
if (zaehler < 16 && anzahl == 0)
{
printf("%.4x |",adress);
for (enof=0;enof<zaehler;enof+=1)
{
printf(" %.2x", zeichene[enof]);
if (enof == 7)
{
printf(" ");
}
}
printf(" | %s\n", zeichene); -->hier die ausgabe soll mit
dieser überprüfung (isprint) gemacht
werden, habe aber keinen plan
}
fclose(fd);
}
-
Hallo alle zusammen,
Was du willst is glaub ich nen HexViewer, keinen Hexeditor ; - ) ODA?
Ich hab da mal was geschrieben, allerdings hat der Kack hier noch n paar Probleme mit Umlauten und Sonderzeichen, vielleicht liegt das aber auch an dem Zeichensatz meines Rechners. Naja, hier is mal der Code zum testen.
#include <stdio.h> #include <string.h> void print_head(void) { printf("\n\t +++++++++++++++++++++++++++++++++++++++++\n" "\t +++++++++++++++++HEX_VIEW++++++++++++++++\n" "\t +++++++++++++++++++++++++++++++++++++++++\n\n"); } void print_usage(char *s) { printf("\t usage: hexview -f file [-d dump_file]\n\n", s); } int hex_view(char *file, char *dump_file) { FILE *f1, *f2; char c,row[16]; int i=0,j=0,k=0; if ( dump_file != NULL ) { f2=fopen(dump_file,"w"); } f1=fopen(file,"r"); if ( f1 == NULL || f2 == NULL ) { printf("couldn´t open some files\n"); return 4; } while ( !feof(f1) ) { fscanf(f1,"%c",&c); if ( c == '\n' ) c = '.'; else row[i++]=c; if ( i == 16 ) { printf("0x%.8x | ", k); k+=0x10; for (i=0;i<16;i++) printf("%.2x ", row[i]); printf("| "); for (i=0;i<16;i++) printf("%c", row[i]); printf("\n"); i=0; } } printf("0x%.8x | ", k+=0x10); for (;j<i;j++) printf("%.2x ", row[j]); for (;j<16;j++) printf(" "); printf("| "); for (j=0;j<i;j++) printf("%c", row[j]); for (;j<16;j++) printf("."); printf("\n"); return 0; } int main(int argc, char **argv) { int i=1; char *file,*dump_file=NULL; print_head(); if (argc < 2) { print_usage(argv[0]); return 1; } //argument check for (;i<argc;i++) { //check for file, which should be hex-viewed if ( !strcmp(argv[i],"-f") ) { if ( i+1 == argc ) { printf("\nmissing filename\n"); return 2; } file=argv[i+1]; } //check for dump_file if ( !strcmp(argv[i],"-d") ) { if ( i+1 == argc ) { printf("\nmissing dump_filename\n"); return 3; } dump_file=argv[i+1]; } } return hex_view(file,dump_file); }
Die dump_option is quatsch, man kann die Ausgabe ja auch mittels '>' umlenken.
Wenn was falsch is oder was besser gemacht gehört, dann bitte schreiben.
Danke schon mal!Tschö