Thema: Delphi Wie Bytes auswerten?

Einzelnen Beitrag anzeigen

Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#7
  Alt 2. Feb 2003, 19:25
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?
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat