Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Integer in Enumeration umwandeln (https://www.delphipraxis.net/99467-integer-enumeration-umwandeln.html)

xZise 12. Sep 2007 16:13


Integer in Enumeration umwandeln
 
Wie kann ich den Index einer Enumeration in eine Enumeration und wieder zurück umwandeln?
Delphi-Quellcode:
TEnum = (eFirst, eSecond, eThird);
Enum : TEnum;
Bei 0 sollte er in Enum "eFirst" stehen haben und so weiter.

DeddyH 12. Sep 2007 16:22

Re: Integer in Enumeration umwandeln
 
Delphi-Quellcode:
type TEnum = (rot, gruen, blau);
var Enum: TEnum;
    iIndex: integer;
begin
  Enum := TEnum(2);
  case Enum of
    rot: ShowMessage('rot');
    gruen: ShowMessage('grün');
    blau: ShowMessage('blau');
  end;
  iIndex := integer(TEnum(Enum));
  ShowMessage(inttostr(iIndex));
end;

xZise 12. Sep 2007 16:30

Re: Integer in Enumeration umwandeln
 
Und wenn ich jetzt ein Integer habe: Wie kriege ich den in die Numeration?

jfheins 12. Sep 2007 16:40

Re: Integer in Enumeration umwandeln
 
Nach emum casten?

enumvar = TEnum(intvar); ;)

Ghostwalker 12. Sep 2007 16:49

Re: Integer in Enumeration umwandeln
 
Umwandlung Enum->Integer:

Delphi-Quellcode:
var
  idx : integer;

begin
  idx := ord(eSecond);
end;
Umwandlung Integer->Enum:

Delphi-Quellcode:
var
  enum : TEnum;
  idx : integer;

begin
  idx := 2;
  Enum := TEnum(idx);
end;

DeddyH 12. Sep 2007 16:59

Re: Integer in Enumeration umwandeln
 
Naja, bis auf die Verwendung von Ord hatte ich das doch in meinem Beispiel. War das so missverständlich? :gruebel:

Ghostwalker 12. Sep 2007 17:04

Re: Integer in Enumeration umwandeln
 
Nein...hab das doch lediglich mal Zusammengefasst...so für den "Auf-Einen-Blick"-Gucker :)

Und ord ist hier die effizientere Methode, da der Cast wegfällt. Funktionieren sollten beide Varianten :)

SirThornberry 12. Sep 2007 17:09

Re: Integer in Enumeration umwandeln
 
Zitat:

Zitat von Ghostwalker
Nein...hab das doch lediglich mal Zusammengefasst...so für den "Auf-Einen-Blick"-Gucker :)

Und ord ist hier die effizientere Methode, da der Cast wegfällt. Funktionieren sollten beide Varianten :)

falsch, ein Cast ist effizenter. Denn bei einem Cast wird dem Compiler verklickert wie er das Stück Speicher anzusehen hat. Ord hingegen ist eine Funktion. Und würde hier die Compilermagic nicht greifen (sofern sie das tut) würde bei einem Funktionsaufruf erst etwas auf den Stack gepackt etc.

marabu 12. Sep 2007 17:33

Re: Integer in Enumeration umwandeln
 
Hallo,

in dem Thread scheint es um das gleiche Thema zu gehen: klick

Grüße vom marabu

Khabarakh 12. Sep 2007 18:18

Re: Integer in Enumeration umwandeln
 
Zitat:

Zitat von SirThornberry
(sofern sie das tut)

Tut sie, denn wie sollte Ord als normale Funktion aussehen (mal ganz abgesehen vom variablen Parameter- und Rückgabetyp)? Es könnte ja nicht viel Sinnvolleres drinstehen als einfach ein Cast, also kommt in der fertigen Übersetzung bei beiden Methoden der gleiche Asm-code heraus: überhaupt keiner ;) (wie du für den harten Typecast ja schon gesagt hast).


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:51 Uhr.
Seite 1 von 2  1 2      

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