Einzelnen Beitrag anzeigen

SirTwist

Registriert seit: 28. Sep 2006
196 Beiträge
 
Delphi XE Professional
 
#7

Re: 2 Integerwerte in einem Integerwert reversibel speichern

  Alt 10. Aug 2007, 16:11
Um die Antwort von mkinzler (die einzig brauchbare soweit mal etwas zu verallgemeinern.

Eine normale Integer-Variable hat einen gewissen Wertebereich (je nach Typ siehe Online-Hilfe). Wenn Du jetzt zwei Werte speichern möchtest, die aber nur einen kleineren Wertebereich annehmen können, dann kannst du das natürlich umwandeln.

Beispiel: Du möchtest Alter und Gewicht speichern, beim Alter gehst Du von möglichen Werten von 0-200 aus (Sicherheitsreserve!), beim Gewicht von 0-1000kg. Dann multiplizierst Du den einen Wert des einen Parameters (Alter) mit dem Maximalwert des anderen Parameters (Gewicht) und bekommst so eine einzelne Integerzahl. Die kannst Du nun in einer Variable speichern, wenn diese Variable mindestens Zahlen von (Maximalwert Alter)*(Maximalwert Gewicht) aufnehmen kann, in unserem Fall also 200000. Das sollte jede 32bit-Integervariable können.

Um an die Einzelwerte zu kommen, teilst Du Deine Integervariable durch den Maximalwert des einen Parameters, dann erhälst Du als ganzzahliges Ergebnis das Alter und als Rest der Division das Gewicht.

Delphi-Quellcode:
const MaxGewicht = 1000
var variable: Integer;
      Alter, Gewicht: Integer;
begin
  // kodieren..
  variable := Alter * MaxGewicht + Gewicht;
  // und wieder zurück
  Alter := variable div MaxGewicht);
  Gewicht := variable mod MaxGewicht);
end;
Wenn negative Werte ins Spiel kommen, wird es allerdings etwas komplizierter, aber das Grundprinzip bleibt gleich.

Gruß,
Michael
  Mit Zitat antworten Zitat