Einzelnen Beitrag anzeigen

Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#1

Variante Records, Strings und 32 bzw. 64 Bit

  Alt 26. Nov 2013, 21:53
Gudn Namd

Zu später Stunde eine Frage zum Thema variante Records. Ich habe folgende Record-Definition:
Delphi-Quellcode:
  TVarStr = record
    case X: Boolean of
      TRUE:
      (
        Str: string[32];
      );
      FALSE:
      (
        P1: string[6];
        P2: string[6];
        P3: string[6];
        P4: string[6];
        P5: string[6];
        P6: string[2];
      );
  end;
Wenn ich dem Record dann einen Wert zuweise, etwa so:
Delphi-Quellcode:
var
  X: TVarStr;
begin
  X.Str:= '306E096DADF14AFDA5E4B22A17EC50D4';
end;
Dann erhalte ich bei folgendem Versuch:
Delphi-Quellcode:
var
  X: TVarStr;
begin
  X.Str:= '306E096DADF14AFDA5E4B22A17EC50D4';
  ShowMessage(X.P1);
end;
nicht etwa wie ich erwarten würde "306E09" als Anzeige, sondern "306E096DADF14AFDA5E4B22A17EC50D4", also den ganzen String mit 32 Zeichen. Wenn ich gleichermaßen auf X.P6 zugreife, lande ich vom Speicherzeiger her hinter dem String und bekomme Datenschrott von 32 Bytes Länge zurück. Interessanterweise scheint sich die Position des Zeigers in dem Fall auch noch unterschiedlich zu verschieben, je nachdem ob ich für 32 oder 64 Bit compiliere. Wo mache ich da jetzt den Denkfehler?

Grüße
Cody
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat