Problem mit Codieren [C]

Da mußt du die Bytes des short int einzeln speichern:
Code:
short int chiff=(dezc+dezd);
      fputc(HIGHBYTE(chiff), loadedz);
      fputc(LOWBYTE(chiff), loadedz);
mit
Code:
#define HIGHBYTE(c) ((unsigned char)((c >> 8) & 0xFF))
     #define LOWBYTE(c) ((unsigned char)(c & 0xFF))
Auslesen:
Code:
char cread;
    cread = fgetc(loadedz);
    chiff = cread;
    chiff << 8;
    cread = fgetc(loadedz);
    chiff += cread;
Oder so, wie umbrasaxum es geschrieben hat. Das wäre natürlich eleganter:
Code:
fwrite((const void *)&chiff , sizeof(chiff), 1,  loadedz);
  fread((const void *)&chiff , sizeof(chiff), 1,  loadedz);
 
moin


(const void *)? und der count?
Steht doch oben
Maximum number of items to be written. Also Anzahl von Zeichen die geschrieben/gelesen werden sollen.

(const void*) Die Funktion erwartet eigentlich einen Pointer von Typ void, dies ermöglicht fread für alle Datentypen anwenden zu können, das muss dich in diesem Fall aber nciht weiter interessieren.


mfg
umbrasaxum
 
Ähem... sorry, aber was erzählt ihr da eigentlich für einen Käse? Durch das Ignorieren eines eventuellen Überlaufes geht keine Information verloren! Wieso auch?
 
moin


Weil er beim decodieren nciht mehr weiss ob bei einem bestimmten Zeichen ignoriert wurde oder nicht.


mfg
umbrasaxum
 
Na und, ist doch egal? Dann gibt es beim Dechiffrieren halt wieder einen Überlauf in die andere Richtung, und schon hat man wieder den Ausgangswert...
 
moin


Ja stimmt auch.
Gehen wir mal von nem unsigned char aus.

In der Exe ist ein Zeichen mit dem Wert 250 und das Passwort ist ander Stelle gerade120
250 + 120 = 370
aus der 370 würde 115 werden wenn ich dann diese 115 minus 120 rechne kommt -5 raus, -5 würde zu 250 werden.

Bei Beitrag 22 hatte ich die Idee schon, habs mir aber leider ausreden lassen....


mfg
umbrasaxum
 

Neue Beiträge

Zurück