- 12V Akku mit 280 Ah bauen         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 13

Thema: Vertauschen von Bytepositionen in BIN-File

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    12.09.2006
    Beiträge
    6

    Vertauschen von Bytepositionen in BIN-File

    Anzeige

    E-Bike
    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.

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    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.

  3. #3
    Erfahrener Benutzer Roboter Genie Avatar von robocat
    Registriert seit
    18.07.2006
    Beiträge
    935
    hab das schnell für dich gec0dert, bin ich nicht lieb?
    Code:
    #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;
    }
    download hier: http://codefactory.dead-men.de/reverse.exe

    da ich nicht wusste, wie groß das file ist, hab ichs mal ohne puffer gemacht.

    gruesse

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    12.09.2006
    Beiträge
    6
    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

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    12.09.2006
    Beiträge
    6
    ... 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

  6. #6
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    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.

  7. #7
    Erfahrener Benutzer Roboter Genie Avatar von robocat
    Registriert seit
    18.07.2006
    Beiträge
    935
    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:
    Code:
    #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;
    }
    download: http://codefactory.dead-men.de/reverse2.exe

    was würdet ihr ohne die katze tun, eh?

    gruesse

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    12.09.2006
    Beiträge
    6
    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!

  9. #9
    Erfahrener Benutzer Roboter Genie Avatar von robocat
    Registriert seit
    18.07.2006
    Beiträge
    935
    hm, sry, schon geschehen

  10. #10
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    .was würdet ihr ohne die katze tun, eh..
    Ja, wirklich

    äääähmmm: Geht das auch mit wild-cards ?
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

fchao-Sinus-Wechselrichter AliExpress