![]() |
AW: Integer in Set laden
Wenn ins Programm 57 eingelesen wird, wie ermittle ich dann welche Niveaus freigeschaltet wurden bei nur 6 Bit?
Das externe programm speichert Niveau 1 mit 1 ab, 2 mit 2, 3 mit 4, 4 mit 8, 5 mit 16 und 6 mit 32. |
AW: Integer in Set laden
Zitat:
Wenn Du wissen willst, ob Niveau 5 freigeschaltet ist, dann ist die Abfrage dazu
Code:
Hast Du meinen Quelltext mal ausprobiert?
nE in Niveaus
Vielleicht ist es so klarer:
Delphi-Quellcode:
program Project1;
{$APPTYPE CONSOLE} {$R *.res} uses System.SysUtils; type TNiveau = (Niveau1, Niveau2, Niveau3, Niveau4, Niveau5, Niveau6); TNiveauSet = set of TNiveau; var Niveaus: TNiveauSet; NiveauZahl: Byte; begin Niveaus := TNiveauSet(Byte(StrToInt('57'))); NiveauZahl := Byte(Niveaus); if Niveau5 in Niveaus then WriteLn('Niveau 5 ist freigeschaltet'); end. |
AW: Integer in Set laden
Ich glaube du hast mich nicht verstanden.
Ich speichere gar nix ab. Ich lese nur aus. Das andere Programm speichert ab mit 1 2 4 8 16 32 und allen Kombinationen daraus. Da kann ich nix dran ändern. Und das muss ich auslesen. Und da das hier nicht funktioniert bin ich aufgeschmissen
Delphi-Quellcode:
TNiveau = (nA = 1, nB = 2, nC = 4, nD = 8, nE = 16, nF = 32);
TNiveauSet = set of TNiveau; NiveauInt := TNiveauSet(StrToInt64Def(<der wert der von draußen kommt>, 0)); |
AW: Integer in Set laden
Zitat:
|
AW: Integer in Set laden
Zitat:
Code:
Da wird in der Variablen NiveauInt etwas gespeichert. Bei meinem Programm wird in der Variablen "Niveaus" ebenfalls etwas gespeichert.
NiveauInt := <irgendwas>
|
AW: Integer in Set laden
Dann verstehe ich euch tatsächlich nicht und verstehe auch grundsätzlich überhaupt nix mehr.
Wenn ich von Außen 57 lese dann bedeutet das Niveau 1, 4, 5 und 6 sind frei. 2 und 3 noch nicht. Wie gestaltet sich dann die Abfrage?
Delphi-Quellcode:
Aber da oben wird doch im Prinzip geprüft, ob die 1 in der 57 ist. Denn Element nB ist das zweite Element im Set mit dem Wert 1.
if TNiveau.nB in NiveauInt then // das hier dürfe niemals zutreffen, da Niveau 2 (B) nicht freigeschaltet ist.
Include(NiveauSet, TNiveau.nB); Aber eigentlich müsste ich 2 abfragen. Ok ich glaube das wars ich gebe auf. Ich brauche diese Zahlen weil ich sonst keine Ahnung habe wie ich prüfen kann was frei ist und was nicht. |
AW: Integer in Set laden
Ich kann mich nur wiederholen. Mein Programm leistet exakt das, was Du möchtest. Teste es doch bitte bitte bitte mal!
Delphi-Quellcode:
program Project1;
{$APPTYPE CONSOLE} {$R *.res} uses System.SysUtils; type TNiveau = (Niveau1, Niveau2, Niveau3, Niveau4, Niveau5, Niveau6); TNiveauSet = set of TNiveau; var Niveaus: TNiveauSet; N: TNiveau; begin Niveaus := TNiveauSet(Byte(StrToInt('57'))); // Integer in das Set laden // Ausgabe welche Niveaus freigeschaltet sind for N:=Niveau1 to Niveau6 do begin if N in Niveaus then WriteLn(Format('Niveau %d ist freigeschaltet', [ord(N)+1])); end; ReadLn; end. |
AW: Integer in Set laden
Warum machst Du es nicht nach alter Väter Sitte
Delphi-Quellcode:
Gruß
funktion Bit0set(wert:byte)_boolean;
begin result:=((wert and 1) =1); end; funktion Bit1set(wert:byte):boolean; begin result:=((wert and 2) =2); end; usw. K-H |
AW: Integer in Set laden
Zitat:
|
AW: Integer in Set laden
Zitat:
Delphi-Quellcode:
Gerne liefere ich das auch in Assembler...
program Project1;
{$APPTYPE CONSOLE} {$R *.res} uses System.SysUtils; var Niveaus: Integer; i: Integer; N: Integer; begin Niveaus := StrToInt('57'); N := 1; for i := 1 to 6 do begin if N and Niveaus<>0 then WriteLn(Format('Niveau %d ist freigeschaltet', [i])); N := N * 2; end; ReadLn; end. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:37 Uhr. |
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-2025 by Thomas Breitkreuz