Enum zu Int umwandeln

  • Hallo Mädels,
    ich habe einen Enumerator in der $CONFIG.DAT deklariert:


    Code
    ENUM EN_EINKAUFEN BUTTER EIER KAESE LEBERWURST
    DECL EN_EINKAUFEN EINKAUF


    Soweit ich das von anderen Programmiersprachen kenne verbirgt sich hinterm Enum eigentlich ein Integerwert.
    Ich möchte nun einen wert aus EINKAUF per EthernetKRL an ein anderen Rechner senden.
    Hier gibt es ja nun leider keine Funktion EKI_SetEnum(.....) lediglich EKI_SetInt(....)
    Gibt es eine einfache Möglichkeit einen Enum in einen Integer zu wandeln? Ich möchte das ungern über eine Selektion mit SWITCH oder IF machen.

    Greetings, Irrer Polterer!

    Wie poste ich falsch? Nachdem ich die Suche und die FAQ erfolgreich ignoriert habe, erstelle ich das gleiche Thema in mehreren Unterforen, benutze einen sehr kreativen Titel wie "Hilfe", am Besten noch mit mehreren Ausrufezeichen, und veröffentliche einen so eindeutigen Text, dass sich jeder etwas Anderes darunter vorstellt.


    Life is a beta version. Full of bugs and no Manual.

    Einmal editiert, zuletzt von IrrerPolterer ()

  • Schritt für Schritt zum Roboterprofi!
  • finde es nicht mehr.


    so sollte es aber gehen


    DECL INT Offset,INTNUM
    DECL STATE_T State
    DECL Char Dummy[60]
    DECL BOOL B


    SWRITE(Dummy[], State, Offset, "%d", Enum)
    B=STRTOINT(Dummy[],INTNUM)


    oder schickst bei EKI direkt den String

  • Vielen Dank Loipe,
    es scheint wirklich die einzige Möglichkeit zu sein, den Weg über SWRITE zu gehen. Unschön, aber okay.

    Greetings, Irrer Polterer!

    Wie poste ich falsch? Nachdem ich die Suche und die FAQ erfolgreich ignoriert habe, erstelle ich das gleiche Thema in mehreren Unterforen, benutze einen sehr kreativen Titel wie "Hilfe", am Besten noch mit mehreren Ausrufezeichen, und veröffentliche einen so eindeutigen Text, dass sich jeder etwas Anderes darunter vorstellt.


    Life is a beta version. Full of bugs and no Manual.

  • immer noch besser als


    Code
    SWITCH Einkauf
      CASE #BUTTER
        INTNUM=1
      CASE #EIER
        INTNUM=2
      CASE #KAESE
        INTNUM=3
      CASE #LEBERWURST
        INTNUM=4
    ENDSWITCH


    und wenn das enum größer wird musst du nichts mehr anpssen.

  • Klar ist's besser. :) Ich verwende nämlich auf dem Leitrechner die gleichen Enumeratoren. Dann braucht man es auf beiden Seiten identisch halten.

    Greetings, Irrer Polterer!

    Wie poste ich falsch? Nachdem ich die Suche und die FAQ erfolgreich ignoriert habe, erstelle ich das gleiche Thema in mehreren Unterforen, benutze einen sehr kreativen Titel wie "Hilfe", am Besten noch mit mehreren Ausrufezeichen, und veröffentliche einen so eindeutigen Text, dass sich jeder etwas Anderes darunter vorstellt.


    Life is a beta version. Full of bugs and no Manual.

  • So'n Dreck. Es funktioniert aber nicht andersrum. Wenn ich also den Integer der mit EKI_GetInt ausgelesen wurde in einen ENUM zurueck zu wandeln. :eviltongue:

    Greetings, Irrer Polterer!

    Wie poste ich falsch? Nachdem ich die Suche und die FAQ erfolgreich ignoriert habe, erstelle ich das gleiche Thema in mehreren Unterforen, benutze einen sehr kreativen Titel wie "Hilfe", am Besten noch mit mehreren Ausrufezeichen, und veröffentliche einen so eindeutigen Text, dass sich jeder etwas Anderes darunter vorstellt.


    Life is a beta version. Full of bugs and no Manual.

  • Wohl oder übel musste ein array mit deinem enum machen wo der index dem enum enspricht.


    Dann hast du im programm wenigstens nur eine zeile



    Enum Zuweisung[4]
    Zuweisung[1]=#butter
    Usw..



    im Programm dann


    Einkauf=Zuweisung[EKI_INT]

    Einmal editiert, zuletzt von Loipe ()

  • Tja. Alles irgendwie zu umständlich, da kann man ja besser mit Konstanten (bzw. festdefinierten Werten) arbeiten.
    z.B. in $Config:

    Code
    CONST INT BUTTER=1
    CONST INT EIER=2
    CONST INT KAESE=3
    CONST INT LEBERWURST=4


    und im Programm:



    Code
    INT INTVALUE
    RET=EKI_SetInt("eingekauf","Aldi/Produkt", KAESE) 
    RET=EKI_GetInt("einkauf","Kuehlschrank/FachOben",INTVALUE)
    SWITCH INTVALUE
    CASE BUTTER
      ;Mach was mit Butter
    CASE KAESE
      ;mach was mit Kaese
    CASE....usw.



    Aber danke für die Mühe, Loipe! :supi:

    Greetings, Irrer Polterer!

    Wie poste ich falsch? Nachdem ich die Suche und die FAQ erfolgreich ignoriert habe, erstelle ich das gleiche Thema in mehreren Unterforen, benutze einen sehr kreativen Titel wie "Hilfe", am Besten noch mit mehreren Ausrufezeichen, und veröffentliche einen so eindeutigen Text, dass sich jeder etwas Anderes darunter vorstellt.


    Life is a beta version. Full of bugs and no Manual.

  • Funktioniert eine Typumwandlung über Parameterübergabe in Funktion Enum to Int wirklich nicht?
    Meine, auch schon probiert zu haben und er spuckte dann Werte 1,2,3,4,5... raus, so wie sie in der Reihenfolge deklariert waren?
    Gruss SJX

    Manche Maenner bemuehen sich lebenslang, das Wesen einer Frau zu verstehen. Andere befassen sich mit weniger schwierigen Dingen z.B. der Relativitaetstheorie.

  • Hallo SJX,
    neee. Das war das erste was ich probiert habe. Kenn ich so aus Visual Studio.

    Greetings, Irrer Polterer!

    Wie poste ich falsch? Nachdem ich die Suche und die FAQ erfolgreich ignoriert habe, erstelle ich das gleiche Thema in mehreren Unterforen, benutze einen sehr kreativen Titel wie "Hilfe", am Besten noch mit mehreren Ausrufezeichen, und veröffentliche einen so eindeutigen Text, dass sich jeder etwas Anderes darunter vorstellt.


    Life is a beta version. Full of bugs and no Manual.

  • wenn du sowas ausprobiert hast war das ne selbergeschriebene Funktion



    und zurück so


    Code
    DEFFCT EN_EINKAUFEN IntToEnum(VAL:IN)
    DECL EN_EINKAUFEN Zuweisung[4]
    Zuweisung[1]=#butter
    Zuweisung[2]=#eier
    Zuweisung[3]=#kaese
    Zuweisung[4]=#Leberwurst
    RETURN Zuweisung[VAL]
    ENDFCT


    geht aber nur mit enum EN_EINKAUFEN

Erstelle ein Benutzerkonto oder melde dich an um zu kommentieren

Du musst ein Benutzerkonto haben um einen Kommentar hinterlassen zu können

Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Geht einfach!
Neues Benutzerkonto erstellen
Anmelden
Du hast bereits ein Benutzerkonto? Melde dich hier an.
Jetzt anmelden