Moin Daniel,
wenn ich mich mal eben selber zitieren darf:
Zitat:
... und dann als geschachtelter Case.
Nix mit Unmengen If/Then Konstruktionen
Delphi-Quellcode:
case Wert[0] of
0..111
begin
case Wert[1] of
0 :
begin
end;
//...
end;
// ...
end;
end;
Wenn nun aber bestimmte Bits bestimmte Bedeutungen haben, dann wird's doch deutlich einfacher.
Auch wenn Du noch intensiver Vorarbeiten betreiben musst:
Bitmasken basteln.
Um in Deinem Beispiel zu bleiben
Delphi-Quellcode:
const
_mskStep = $F8; // Die obersten 5 Bit werden ausmaskiert $F8 = 11111000 bin
_mskDirection = $04; // Das Fahrtrichtungsbit wird ausmaskiert
_mskLight = $02; // Licht
_mskHorn = $01; // Horn
Wenn alle 8 Bit benutzt werden kann man durch oder Verknüpfung der Masken feststellen, ob man alle Bit berücksichtigt hat. Dann muss 255 rauskommen.
(Bei weniger benutzten Bits entsprechend natürlich weniger)
40 müsste übrigens Fahrstufe 5 Rückwärts sein (00101000)
Um die Fahrstufe zu errechnen kannst Du nun
iStep := (Wert[1] and $F8) shr 3;
rechnen.
Die oberen 5 Bit ausmaskieren und dann um so viele Bit nach rechts verschieben, dass das niederwertigste Bit der Fahrstufe ganz rechts steht. Dann stimmt auch der Dezimalwert.
Die anderen drei Bit kannst Du dann als Boolean Werte (Flags) nehmen:
z.b.
fHornIsOn := (Wert[i] and _mskHorn) = _mskHorn;
dann kannst Du mit
if fHornIsOn then // ...
Lesbar entscheiden was los ist.
Soweit Klar?