Naja, lies doch die Datei einfach als binärfile in ein Array [ 0 ---> juchu]
und schreib sie dann in einer Schleife [juchuu --> 0] wieder raus.
?Am PC mit Windows in Assembler ?
Hallo und Guten Morgen,
ich brauche Hilfe!
Ich möchte in einem bin-file alles byte komplett vertauschen.
Mal ein Bsp.
so sieht es vorher aus:
00000 48 61 6C 6C 6F 2C 20 64 69 65 73 20 69 73 74 20
00010 65 69 6E 20 42 65 69 73 70 69 65 6C 2D 54 65 78
00020 43 56 67 23 64 76 59 87 45 45 45 FF FF FF FF FF
danach soll es so aussehen:
00000 FF FF FF FF FF .............................................
00010 .................................................. ................
00020 ............................................. 6F 6C 6C 61 48
Für eine guten Rat wäre ich sehr dankbar. ich habe schon ein paar freeware hexeditoren probiert aber direkt so eine funktion scheint es nicht zu geben
Achso, ich muss hier mit Windows arbeiten! Also irgendwie was scripten unter linux geht nicht.
Naja, lies doch die Datei einfach als binärfile in ein Array [ 0 ---> juchu]
und schreib sie dann in einer Schleife [juchuu --> 0] wieder raus.
?Am PC mit Windows in Assembler ?
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
hab das schnell für dich gec0dert, bin ich nicht lieb?
download hier: http://codefactory.dead-men.de/reverse.exeCode:#include <stdio.h> #include <stdlib.h> #include <conio.h> int main() { FILE *pDatei,*pZiel; char fname[255]; char fname2[255]; long size; char zeichen; printf("Name der Quell-Datei?"); scanf("%s",fname); printf("Name der Ziel-Datei?"); scanf("%s",fname2); fflush(stdin); pDatei = fopen(fname,"rb"); if(pDatei == NULL) { printf("Fehler beim Oeffnen der Quell-Datei!\n"); printf("Programm beendet.\n"); getch(); exit(1); } pZiel = fopen(fname2, "wb"); if(pZiel == NULL) { printf("Fehler beim Oeffnen der Ziel-Datei!\n"); printf("Programm beendet.\n"); fclose(pDatei); getch(); exit(1); } fseek(pDatei,0,SEEK_END); size=ftell(pDatei); while (size>=0) { if(fread (&zeichen,1,1,pDatei)) fwrite (&zeichen,1,1,pZiel); size--; fseek(pDatei,size,SEEK_SET); } fclose(pZiel); fclose(pDatei); printf("Programm erfolgreich beendet.\n"); getch(); return 0; }
da ich nicht wusste, wie groß das file ist, hab ichs mal ohne puffer gemacht.
gruesse
WOW, das ist echt MEGALIEB!!!!
das sieht man gleich wer im stoff steht.
so schnell konnte ich nichteinmal mein visual studio installieren.
das mit dem Puffer ist genau richtig so. Die dateigroessen variieren teilweise sehr stark.
@ PicNick
ich hätte das jetzt auch genau nach deinem tipp so gemacht. danke dir.
das errinnert mich irgendwie an meine informatik übungen an der uni
... so ich nochmal.
ich würde unter anderen diese exe gern in einem Batchfile aufrufen.
Gibt es eine möglichkeit, das ich bei dem aufruf der exe gleich die parameter fname und fname2 übergeben kann?
wie man es sonst z.b. von nero.exe oder anderen kommandozeilenfähigen programmen kennt.
gruß GT
Normalerweise
Code:main(int argc, char **argv) { int ix; for (ix = 1; ix <= argc;ix++) printf("Param%d %s\n", ix, argv[ix]); ... blabla... }
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
ja
ich wollte auch zuerst kommandozeilenparameter verwenden, dann lässt es sich wenigstens in ne script (batch) datei einarbeiten. ich dachte nur, so isses idiotensicher.. ^^
ausserdem hab ich grad dieses "int argc, char **argv" nemma im kopf gehabt. (danke)
wenn interesse besteht, kann ich es schnell ändern und recompilieren. (weil unser fragesteller von "mehreren dateien" spricht.)
danke fürs lob @GT2003, freut mich, geholfen zu haben.
weitere kritische anmerkungen zum code sind erlaubt und erwünscht, ich lerne gern was dazu.
EDIT:
hier also mit parametern:
download: http://codefactory.dead-men.de/reverse2.exeCode:#include <stdio.h> #include <stdlib.h> int main(int argc, char **argv) { FILE *pDatei,*pZiel; long size; char zeichen; if(argc<2) { printf("falsche Parameter\n"); printf("Syntax: reverse2.exe [path]sourcefile [path]targetname\n"); printf("Beispiel: reverse2.exe c:\autoexec.bat c:\autoexec.bak"); printf("Programm beendet.\n"); exit(1); } pDatei = fopen(argv[1],"rb"); if(pDatei == NULL) { printf("Fehler beim Oeffnen der Quell-Datei!\n"); printf("Programm beendet.\n"); exit(1); } pZiel = fopen(argv[2], "wb"); if(pZiel == NULL) { printf("Fehler beim Oeffnen der Ziel-Datei!\n"); printf("Programm beendet.\n"); fclose(pDatei); exit(1); } fseek(pDatei,0,SEEK_END); size=ftell(pDatei); while (size>=0) { if(fread (&zeichen,1,1,pDatei)) fwrite (&zeichen,1,1,pZiel); size--; fseek(pDatei,size,SEEK_SET); } fclose(pZiel); fclose(pDatei); printf("Programm erfolgreich beendet.\n"); return 0; }
was würdet ihr ohne die katze tun, eh?
gruesse
hehe,
das mit den paramtern war auch nicht geplant. kam nur gerade eine kollege hier bei mir auf die idee das das ganz nützlich sein könnte.
@robocat:
du brauchst das nicht extra neu zu compilieren! bisschen was will ich ja auch alleine machen. obwohl das bei euch anscheinend ja schnell von der hand geht. aber ich fuchse micn da gerne wieder rein. und mit eurer hilfe geht das ja schneller als erwartet
@picNick
ebenfalls vielen dank für die parameterübergabe!
nochmals vielen dank!
Ja, wirklich.was würdet ihr ohne die katze tun, eh..
äääähmmm: Geht das auch mit wild-cards ?
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Lesezeichen