VB 6.0: Bits & Bytes

Hallo Leute

Problem:

Ich muß eine binär aufgebaute Datei auslesen. Dort gibt es ein Bitfeld (2 Byte gross).
Ich muss aus diesem Bitfeld einen Wert auslesen. Der steht in den Bits 0-12.
Wie kann ich das in VB !!! machen ??

Von Sculpture bekam ich den Tipp die 2-Byte in eine Long-Variable (TmpLong)
einzulesen und dann folgendes zu berechnen:

TmpLong AND 4095

Das klappt auch soweit, allerdings nur wenn in den Bits 0-12 Werte

Hi Thomas,

Von Sculpture bekam ich den Tipp die 2-Byte in eine
Long-Variable (TmpLong)
einzulesen und dann folgendes zu berechnen:

TmpLong AND 4095

Das klappt auch soweit, allerdings nur wenn in den Bits 0-12
Werte 4095 darstellen :wink:

Viele Grüße
Sculpture

Von Sculpture bekam ich den Tipp die 2-Byte in eine
Long-Variable (TmpLong)
einzulesen und dann folgendes zu berechnen:

TmpLong AND 4095

Das klappt auch soweit, allerdings nur wenn in den Bits 0-12
Werte 2 (Dezimalsystem)

2 hoch 3 => 8 (Dezimalsystem)
Summe = 10 (Dezimalsystem)

Sind alle Bits geschaltet, so ergibt sich
2 hoch 0 => 1
2 hoch 1 => 2

2 hoch 7 => 128
Summe = 255

Ob ein bestimmtes Bit geschaltet ist, kannst du über die „AND“-Funktion ermitteln. Bei der zweiten Bitleiste würde
„If TmpLong and 10 …“ ergeben, daß die Bits 1 und 3 geschaltet sind. „If TmpLong and 2 …“ würde ergeben, daß das Bit 1 geschaltet ist (ohne Berücksichtigung des ebenfalls geschalteten Bits 3). „If TmpLong and 8“ würde ergeben, daß das Bit 3 geschaltet ist (und das Bit 1 würde nicht berücksichtigt).

Willst du nun die Konstellation der Bitleiste insgesamt überprüfen, müßtest du die 12 Bits in einer Schleife o.ä. abarbeiten und das Ergebnis entsprechend auswerten. Dann dürften auch keine Probleme mit größeren Werten auftreten:

Bsp.:
For lCount = 0 to 11
If TmpLong And 2^lCount Then
[Verarbeite irgendwas]
End If
Next lCount

Hope It Helps!
Siegfried

Hallo Siegfried,
hallo Sculpture,

vielen herzlichen Dank !! Ihr habt mir wirklich sehr geholfen.
Ich denke ich hab jetzt auch die Hintergründe einigermaßen geschnallt.

Gruß

Tom