AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Integer in Set laden

Ein Thema von DieDolly · begonnen am 16. Okt 2019 · letzter Beitrag vom 18. Okt 2019
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#1

Integer in Set laden

  Alt 16. Okt 2019, 17:36
Ich habe diese Deklarationen
Delphi-Quellcode:
type
 TNiveau = (nA = 1, nB = 2, nC = 4, nC = 8, nD = 16, nE = 32);
 TNiveauSet = set of TNiveau;
In einer Procedure lade ich einen Integerwert aus einer Datei der zum Beispiel 57 sein kann in eine Variable NiveauInt.
Mit sowas hier gucke ich, welches Niveau im Set enthalten ist (insgesamt 6x)
Delphi-Quellcode:
if TNiveau.nA in NiveauInt then
 Include(NiveauSet, TNiveau.nA);
Das Problem ist, dass ich die 57 nicht in die Variable NiveauInt geladen bekomme.
Mein Versuch NiveauInt := TNiveauSet(Byte(57)); Egal von welchem Typ NiveauInt ist, es klappt nicht. Was mache ich falsch?
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#2

AW: Integer in Set laden

  Alt 16. Okt 2019, 17:40
Der höchste Wert im Set is 32. Damit benötigt das Set 33 Bit und passt nicht mehr in einen Integer - und schon gar nicht in ein Byte.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#3

AW: Integer in Set laden

  Alt 16. Okt 2019, 17:49
Habe ich hier einen Denkfehler? Int64 funktioniert auch nicht.
Das Problem ist, dass ich = 1, = 2, = 4 bis 32 angeben muss, da die Werte die von Außen kommen sonst nicht stimmen.

 NiveauInt := TNiveauSet(StrToInt64Def(57, 0));
  Mit Zitat antworten Zitat
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
1.081 Beiträge
 
Delphi 2009 Professional
 
#4

AW: Integer in Set laden

  Alt 16. Okt 2019, 17:58
 NiveauInt := TNiveauSet(StrToInt64Def(57, 0));
Na ja, 57 ist auch kein String, falls du das meinst.
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#5

AW: Integer in Set laden

  Alt 16. Okt 2019, 17:59
Ist nur ein Tippfehler hier im Editor von mir. Da kommt schon ein String rein.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#6

AW: Integer in Set laden

  Alt 16. Okt 2019, 18:05
Habe ich hier einen Denkfehler?
Vermutlich! Dein Code compiliert ja nicht mal, da nC doppelt vorkommt. Also zeig bitte mal den realen Code.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#7

AW: Integer in Set laden

  Alt 16. Okt 2019, 18:21
Nimm das nC weg Es sind nur Tippfehler im Editor. Das ist so gesehen realer Code nur habe ich die Variablennamen abgeändert. Alle Namen der Deklarationen sind bei mir richtig.
Sowas würde der Compiler als aller erstes bemängeln. Aber es geht nur um diese Umwandlung. Es hakt nur an dieser einen Stelle

NiveauInt := TNiveauSet(StrToInt64Def('57', 0)); Die 57 kommt aus einer Textdatei.

Auch hiermit kommt der Umwandlungsfehler. Also ohne Zuweisungen der Zahlen.
  TNiveau = (nA, nB, nC, nD, nE, nF); Füge ich dann oben Byte() hinzu, funktioniert es. Aber ich brauche leider die Wert bis = 32.

Ich erkläre mal das Vorhaben.
Ein externes Programm hat 6 Niveau-Stufen die man freischalten kann. Das Programm speichert das in folgenden Schritten: 1, 2, 4, 8, 16 und 32.
Hat man alle 6 Stufen freigeschaltet, steht in der Konfigurationsdatei 63.

Diese Zahl lese ich aus und möchte meine Datentypen oben damit korrekt füllen. Das mache ich mit den in -Abfragen.

Geändert von DieDolly (16. Okt 2019 um 18:34 Uhr)
  Mit Zitat antworten Zitat
DenkDirNix

Registriert seit: 13. Dez 2018
71 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Integer in Set laden

  Alt 16. Okt 2019, 18:45
Wenn solche Typ-Umwandlungen haken kann man gut mit varianten Records "herumspielen". In deinem Fall:

Code:
var
  Niveau: case boolean of
            false: (Menge: TNiveauSet);
            true : (Int : int64)
          end
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#9

AW: Integer in Set laden

  Alt 16. Okt 2019, 18:48
Füge ich dann oben Byte() hinzu, funktioniert es. Aber ich brauche leider die Wert bis = 32.
Brauchst du nicht! Denn...

Ein externes Programm hat 6 Niveau-Stufen die man freischalten kann. Das Programm speichert das in folgenden Schritten: 1, 2, 4, 8, 16 und 32.
Hat man alle 6 Stufen freigeschaltet, steht in der Konfigurationsdatei 63.
Die Zahlen 1, 2, 4, 8, 16, 32 sind lediglich die entsprechenden Bitmasken, aber nicht die Ordnungszahlen der Set-Elemente.

Da deine Integerwerte nicht größer als 63 werden können, genügt ein Byte-Cast.

Direkt auf den Integer casten geht nicht, da das Set nur ein Byte groß ist und somit beim Cast auf einen Integer die Größe nicht passt.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
samso

Registriert seit: 29. Mär 2009
439 Beiträge
 
#10

AW: Integer in Set laden

  Alt 16. Okt 2019, 18:57
Das Programm speichert das in folgenden Schritten: 1, 2, 4, 8, 16 und 32.
Hat man alle 6 Stufen freigeschaltet, steht in der Konfigurationsdatei 63.
Dann hat Dein Set aber nicht 33 Bit sondern 6 Bit. So sollte es gehen:

Delphi-Quellcode:
type
 TNiveau = (nA, nB, nC, nD, nE, nF);
 TNiveauSet = set of TNiveau;


var
  Niveaus: TNiveauSet;
  NiveauZahl: Byte;
begin
  Niveaus := TNiveauSet(Byte(StrToInt('57')));
  NiveauZahl := Byte(Niveaus);
end;
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:35 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