Christian Kruse: (C) File kodieren?

Beitrag lesen

你好 Markus,

Gibt es irgend eine Möglichkeit die Textdatei irgendwie zu kodieren, damit
man den Inhalt nicht mehr nachvollziehen und somit nicht seine eigenen
Ideen dort hinterlassen kann?

Du kannst es verschleihern, indem du die Zahlen z. B. im Binär-Format
abspeicherst:

  
int num = 123;  
FILE *fd;  
  
if((fd = fopen("file","wb")) == NULL) {  
  perror("fopen");  
  return EXIT_FAILURE;  
}  
  
fwrite(&num,sizeof(num),1,fd);  
fclose(fd);  

Zuerst dachte ich an etwas wie eine mit fwrite erzeugte Datei, die, so
weit ich das verstanden habe, binär gespeichert wird,

Das ist korrekt, ja, ist aber nur eine Verschleiherung. Findige Köpfe sind
trotzdem in der Lage, herauszufinden, wie das Format aussieht.

aber eine mit write erzeugte Datei sieht bei mir genauso aus, wie eine
ganz normale Textdatei.

Dann hast du einen String hineingeschrieben :)

Was gäbe es also für einen Lösungsansatz?

Du könntest, um Platz zu sparen und es noch schwerer zu machen,
4-Byte-Integer benutzen und darin 32 der 0en und 1en speichern. Dafür
braucht es ja nur ein Bit. Beispiel-Encoder-Programm:

  
#include <stdio.h>  
#include <stdlib.h>  
  
int main(void) {  
  static const char *numbers = "0011010110110111000110101001010001101011011011100011010100101000110101101101110001101010010100011010110110111000110101001010001101011011011100011010100101000110101101101110001101010010100011010110110111000110101001010001101011011011100011010100101000110101101101110001101010010100011010110110111000110101001010";  
  char *ptr;  
  int num = 0,cnt;  
  
  FILE *fd;  
  
  if((fd = fopen("coded","wb")) == NULL) {  
    perror("fopen");  
    return EXIT_FAILURE;  
  }  
  
  for(cnt=0,ptr = (char *)numbers;*ptr;++ptr,++cnt) {  
    if(*ptr == '1') num |= 1;  
  
    if(num < 31) num <<= 1;  
    else {  
      fwrite(&num,sizeof(num),1,fd);  
      num = 0;  
    }  
  }  
  
  fclose(fd);  
  
  return EXIT_SUCCESS;  
}  

Beim einlesen musst du halt immer 4 Byte auf einmal einlesen und dann die
Zahl bitweise durchlaufen und schauen, ob das Bit gesetzt ist. Ist es
gesetzt, kommt an der Stelle eine 1, ansonsten eine 0.

再见,
克里斯蒂安

--
Sobald dir ein Gedanke kommt, lache über ihn.
http://wwwtech.de/