Zitat von
Eichhoernchen:
okay der fehler wäre durch mein Programm nicht aufgefallen weil nur nach der 0ten stelle gefragt wird, hab ich gar nicht dran gedacht, aber gut dann merk ich mir das aufjedenfall mit der variablen und wie es richig geht!
Dankeschön!
Bitte! Hmm, wenn dich immer nur das Bit an Position 0 interessiert, dann kannst du auch gleich die Compilermagic-Funktion "Odd" (ungerade) benutzen. Eine Zahl ist ja genau dann ungerade, wenn Bit 0 gleich 1 ist.
Zitat:
Edit: hab noch ne kleine Frage...ich frag einfach nochmal hier, gehört zwar nur noch bedinnt dazu:
Ich bin dabei ein kleines Verschlüsselungsprogramm zu schreiben, was die Daten in den letzten Bits des Farbcodes versteckt.
Ich glaube das nennt man Stenographie.
Ah ja, Steganographie. Stenographie ist Schnellschrift/Kurzschrift.
So wie du das beschreibst, sollte es eigentlich klappen. Falls nicht, stimmt irgendetwas in deiner Implementierung nicht. Hier mal ein Beispiel, wie es funktionieren könnte:
Delphi-Quellcode:
// kodieren:
r1 := (r1 and $FE) or (DasByte and 1);
DasByte := DasByte shr 1;
g1 := (g1 and $FE) or (DasByte and 1);
DasByte := DasByte shr 1;
b1 := (b1 and $FE) or (DasByte and 1);
DasByte := DasByte shr 1;
// usw. bis g3
// dekodieren:
// var BitMaske: Byte;
BitMaske := 1;
DasByte := 0;
if Odd(r1) then DasByte := DasByte or BitMaske;
BitMaske := BitMaske shl 1;
if Odd(g1) then DasByte := DasByte or BitMaske;
BitMaske := BitMaske shl 1;
if Odd(b1) then DasByte := DasByte or BitMaske;
BitMaske := BitMaske shl 1;
// usw. bis g3
// alternativ wäre auch möglich:
BitMaske := 1;
DasByte := 0;
DasByte := DasByte or (BitMaske * (r1 and 1));
BitMaske := BitMaske shl 1;
DasByte := DasByte or (BitMaske * (g1 and 1));
BitMaske := BitMaske shl 1;
// usw.
// das erspart die if-Abfrage, benötigt aber eine Multiplikation
// müsste man testen, was in der Praxis schneller ist