Dateien dauerhaft einbinden



  • das 'fread' muss ein 'fgetc' sein.^^
    🙂



  • Scheint einleuchtend kann es zwar im Moment nicht ausprobieren.
    Aber funktioniert es auch wenn ich wirklich die ganze Datei möchte und nicht nur den Inhalt zb einer textdatei sondern eine ganze zB doc datei?
    Bekommt das fgetc hin?
    Danke schonmal



  • verstehe ich das richtig, du willst eine exe-datei als ein array in einer zweiten -exe speichern ?
    ansonsten, ja, das geht mit fgetc.
    in windows musst du darauf achten, dass du fopen (..., "rb") und
    fopen (..., "wb");
    schreibst.
    weil dir sonst der windows compiler beim lesen die CR LF durch LF ersetzt und beim schreiben schummelt er dir zu einem LF ein CR LF dazu.



  • danke mit ein paar änderungen am prog funktioniert es ..



  • Noch eine frage da die datei unter umständen sehr groß ist wie kann ich das Array zB in gcc linken?
    wenn ich zB das hier habe:

    static const prog[] =
    {29, 3e, f4, 64, 67, 64, 64, 64, 60, 64, 64, 64, 9b, 9b, 64, 64, dc, 64, 64, 64,
    64, 64, 64, 64, 24, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
    64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
    7c, 65, 64, 64, 6a, 7b, de, 6a, 64, d0, 6d, a9, 45, dc, 65, 28, a9, 45, 30, 0c,
    0d, 17, 44, 14, 16, 0b, 03, 16, 05, 09, 44, 07, 05, 0a, 0a, 0b, 10, 44, 06, 01,
    44, 16, 11, 0a, 44, 0d, 0a, 44, 20, 2b, 37, 44, 09, 0b, 00, 01, 4a, 69, 69, 6e,
    40,...};

    Wenn ich versuche mit

    gcc -ansi array.c cryptor.c -o crypt

    kommen sehr viele dieser Fehler:

    array.c:2:1: Fehler: ungültiger Suffix »a« an Ganzzahlkonstante
    array.c:2:1: Fehler: ungültiger Suffix »c« an Ganzzahlkonstante
    array.c:2:1: Fehler: Exponent hat keine Ziffern
    array.c:2:1: Fehler: Exponent hat keine Ziffern
    array.c:2:1: Fehler: ungültiger Suffix »f« an Ganzzahlkonstante
    array.c:2:1: Fehler: ungültiger Suffix »a« an Ganzzahlkonstante
    array.c:2:1: Fehler: ungültiger Suffix »d« an Ganzzahlkonstante
    array.c:2:1: Fehler: ungültiger Suffix »c« an Ganzzahlkonstante
    array.c:2:1: Fehler: ungültiger Suffix »a« an Ganzzahlkonstante
    

    Danke



  • Du mußt noch jeweils "0x" vor jede Hexadezimalzahl scheiben:

    fprintf (out, "0x%02x, ", i);
    


  • Zusatz: Du solltest auch ein [unsigned] char-Array benutzen (sonst hast du ja ein int Array):

    fputs (out, "static const char array[] =\r\n{");
    


  • ok danke jetzt ist noch die frage wie ich das gnaze wiederherstelle so geht es nicht:

    while(i<strlen(array))
    
    {
    
    schreibeDatei.put(array[i]);
    
    i++;
    
    }
    


  • frequently schrieb:

    ok danke jetzt ist noch die frage wie ich das gnaze wiederherstelle so geht es nicht:

    nicht mit 'strlen', sondern mit 'sizeof'

    btw, weil mein beispiel so verbuggt war, hier mal eine lauffähige version:

    #include <stdio.h>
    #include <stdlib.h>
    
    void main (void)
    {
      char in_name[512];
      FILE *in, *out;
      int count;
    
      printf ("file? ");
      scanf ("%s", in_name);
    
      in = fopen (in_name, "rb");
      if (!in)
      {
        puts ("can't open source file");
        exit (0);
      }
    
      out = fopen ("c:\\array.c", "wb");  // <--- nach belieben ändern
      if (!out)
      {
        puts ("can't open output file");
        exit (0);
      }
    
      fputs ("static const unsigned char array[] =\r\n{\r\n\t", out);
      count = 0;
      for (;;)
      {
        int c = fgetc (in);
        if (c == EOF)
        {
          fseek (out, -2, SEEK_CUR);  // letztes überflüssiges ',' wieder entfernen  
          break;
        }
        putchar ('.');
        if (count++ == 16)   // line breaks 
        {
          fputs ("\r\n\t", out);
          count = 0;
        }
        fprintf (out, "0x%02x, ", c);  
      }  
      fputs ("\r\n};\r\n", out);
    
      puts ("\ndone");
    }
    

    🙂



  • Danke funktioniert einwandfrei...


Anmelden zum Antworten