Hi Thomas,
Jetzt stehe ich vor dem Problem, ein 2-Byte großes Bitfeld
auslesen zu müssen. Das Feld teilt sich auf in 13 Bit (bit
0-12) und 3 Bit (bit 13-15). Wie kriege ich mit VB raus was da
jeweils einzeln drinnsteckt ??
Angenommen, Du hast die 2 Byte in eine Long-Zahl i eingelesen. Um die Bits zu extrahieren, musst Du sie - wie schon zuvor geschrieben - mit Bitmasken „herausholen“. Bit n bekommst Du, indem Du den Wert
bit_n = i AND 2^n
berechnest (beachte hier, dass in VB logische und boolsche ANDs gleich sind im Gegensatz zu C++ z.B., hier ist es && und &:wink:
Hier erhältst Du etwa bei 10 = %1010 (Binärschreibweise) und bit 1:
bit_1 = 10 AND 2^1 = 2.
Interessiert Dich nur, ob das Bit gesetzt ist und nicht dessen Wert, musst Du durch diesen noch dividieren:
bit_n_gesetzt = (10 AND 2^n)/2^n
Das ergibt 1 oder 0.
So, nun zu Deinem Problem:
Die Zahlen aus den Bits 0…12 bzw. 13-15 erhältst Du wie folgt:
bits_0_12 = (i AND (%1111111111111000))/(%1000) = (i AND 65528)/8
bits_13_15 = i AND (%111) = i AND 7,
wenn die Bits in der Reihenfolge des Bitstroms bezeichnet sind, ansonsten:
bits_0_12r = i AND (%1111111111111) = i AND 4095
bits_13_15r = (i AND (%1110000000000000))/(%10000000000000) = (i AND 57344)/8192,
VB erkennt leider keine Binärzahlen, ich habe sie nur der Übersichtlichkeit hingeschrieben.
Hoffe, das hat Dir geholfen, wenn Du noch Fragen hast oder irgendwas nicht funktioniert, melde Dich nochmal.
Viele Grüße
Sculpture