Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Case in einem Record...?


wazup - Fr 14.11.08 21:26
Titel: Case in einem Record...?
Hallo...

Ich habe vorhin einen Post gelesen worin ein code stand mit einem Case in einem Record, bin aber irgentwie nicht drauf gekommen für was das gut sein könnte...

Kann mir das jemand erklären?

Danke im vorraus...

cu, wazap^


Chryzler - Fr 14.11.08 21:37

Den würde ich gern mal sehen. Könntest du den entsprechenden Abschnitt posten?


jaenicke - Fr 14.11.08 21:37

Damit kannst du auf verschiedene Weise auf die selben Daten zugreifen ;-).
// EDIT:
Das nennt sich variante Records:
http://www.delphi-treff.de/sprachen/object-pascal/komplexe-datentypen/


wazup - Fr 14.11.08 21:44

Danke schon mal!

user profile iconChryzler hat folgendes geschrieben Zum zitierten Posting springen:
Den würde ich gern mal sehen. Könntest du den entsprechenden Abschnitt posten?


user profile iconDevilFish hat folgendes geschrieben Zum zitierten Posting springen:
Also meine Millionenschleife sieht ungefähr so aus, und nach ein par Tests habe ich gemerkt das die Additionen mit inc ziemlich bremsen. Gut aber wies aussieht kann man da wohl nichts machen. Auf jeden Fall danke für die vielen Antworten.
Die Schleife dient übrigens zur verschlüsselung von Daten mittels BlowFish.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
Type

  T4Bytes = packed record case Integer of
    0: (Byte: array[1..4of Byte);
    1: (Total: Cardinal);
  end;


jaenicke - Fr 14.11.08 22:04

ja, und in diesem Fall kannst du dann entweder auf den Cardinalwert (4 Byte groß) oder die einzelnen Bytes zugreifen. Beides ist der selbe Speicher.

Delphi-Quelltext
1:
2:
3:
4:
5:
var
  x: T4Bytes;
begin
  x.Total := 1150;
  ShowMessage(IntToStr(x.Byte[1]));
Herauskommen sollte dort 1150-1024 = 126, denn die 1024 stehen ja im zweiten Byte, in dem dann 100 (binär), also 4 stehen sollten.


Hobby-Programmierer - Sa 15.11.08 02:20

Hallo ...,
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Damit kannst du auf verschiedene Weise auf die selben Daten zugreifen ;-).
// EDIT:
Das nennt sich variante Records:
http://www.delphi-treff.de/sprachen/object-pascal/komplexe-datentypen/

ich hatte vor 'Ur'zeiten mal folgenden Code für ne eigene Datenbank verwendet

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
  TIdx_Data = (Header, Calender);

  TIndexRec = Record
    case Daten: TIdx_Data of
     Header:  (HFlag : Boolean;    // negativ wenn DB nicht ordnungsgemäß geschlossen wurde
               HVer  : String[5]; // Version
               HBID  : Cardinal;   // Benutzernr. = Empfängernr
               HCrypt: String[25]);   // Datenbankschlüssel

     Calender:(DTag: TDate;       
               DVfy: Boolean;     
               DFt : Byte;       

               DInx: Byte;        
               DBeg: TTime;       
               DEnd: TTime;       

               L_Azv: Word;       
               L_TPl: Word;       
               L_Hbv: Word); 
  end;

Vorteil war, das ich im Header Benutzerspezifische Daten ablegen konnte!

LG Mario