Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Geteilte Felder in RECORDs??? (https://www.delphipraxis.net/1840-geteilte-felder-records.html)

dmw256 27. Dez 2002 02:39


Geteilte Felder in RECORDs???
 
Moin, moin!

Kann man in Records Felder so deklarieren, daß man auf verschiedere
Art und Weise auf gleichen Speicherbereich zugreift?

Soll heißen, wenn man z.B. ein Feld
a: integer (4 Bytes)
hat, kann man irgendwie eine Variable
b: word
so definieren, daß b z.B. genau auf das 2. und 3. Byte von a
liegt?
(nach a:=0;b:=1; sollte a dann 256 sein...)
Und das ganze in einem Record (in Assembler jeht dat!)

Christian Seehase 27. Dez 2002 02:51

Moin dmw,

dat jeht auch in Delphi :mrgreen:

Delphi-Quellcode:
TMyVariableType =
packed record
  // hier der Feste Anteil (muss nicht sein):
  dwFeld : DWORD;
  sFeld : string;
  // und hier der variable:
  case byte of
  $01 : (
    dwFeld1 : DWORD;
    dwFeld2 : DWORD;
    );
  $02 : (
    abFeld : array [1..4] of Byte;
    );
  $03 : (
    wdFeld : WORD;
    wdDummy : WORD;
    );
end;
Beim case muss, wie auch beim case im Programm ein ordinaler Typ angegeben werden, der gross genug ist um alle Unterscheidungen zu ermöglichen (Boolean würde bei dem Beispiel nicht funktionieren, da es nur zwei verschiedene Werte kennt).
Die Nummerierung muss nicht lückenlos sein. Die Angaben müssen halt nur im Wertebereich des angegebenen Typs liegen.
Wenn die einzelnen Varianten unterschiedlich gross sein sollen, muss man mit dem kleinsten beginnen, und dann nach Grösse aufsteigend weiter deklarieren (ist zumindest sicherer)

[EDIT]
Was ich noch vergessen hatte:
Der Variante Teil muss am Ende der Deklaration stehen.
[/EDIT]

dmw256 27. Dez 2002 03:02

Vielen Dank!!! :D
Werde ich doch gleich mas ausprobieren! :bounce2:


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:03 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz