2011-01-17 17 views
2

Ich muss Werte von einem Byte erhalten in drei Teile der Bit-Kombination gespeichert.Wie zu analysieren Byte mit Bits Wert

Bitkombination folgt

| - - | - - - | - - - |

erste Teil enthält zwei Bits Der zweite Abschnitt enthält 3 Bits Der dritte Abschnitt enthält 3 Bits

Probenwert ist

11.010.001 = 209 dezimal

Was ich will, ist drei verschiedene Eigenschaften erstellen, die erhalten ich Dezimalwert von drei Teilen eines gegebenen Bits wie oben definiert.

wie kann ich Bit Werte aus dieser Dezimalzahl und dann Dezimalwert von entsprechenden Bits erhalten ..

Antwort

5

Verwenden Sie einfach Verschieben und Maskieren. Unter der Annahme, dass der Zwei-Bit-Wert ist in dem hohen Bits des Bytes:

int value1 = (value >> 6) & 3; // 3 = binary 11 
int value2 = (value >> 3) & 7; // 7 = binary 111 
int value3 = (value >> 0) & 7; 

Die letzte Zeile nicht den Shift-Operator natürlich zu verwenden hat - Verschiebung von 0 Bits tut nichts. Ich denke, es trägt zur Konsistenz bei.

Für Ihren Probenwert, der Wert 1 = 3, Wert2 geben würde = 2, value3 = 1.

Umkehrung:

byte value = (byte) ((value1 << 6) | (value2 << 3) | (value3 << 0)); 
+0

Thanks a lot. Es hat mein Problem gelöst :) – Mohsan

1

Sie die verschiedenen Teile extrahieren Bit-Masken, wie folgt aus:

int part1=b & 0x3; 
int part2=(b>>2) & 0x7; 
int part3=(b>>5) & 0x7; 

Diese Verschiebt jeden Teil in die niedrigstwertigen Bits und verwendet dann binär und alle anderen Bits weg.

Und ich nehme an, Sie wollen nicht den Dezimalwert dieser Bits, aber ein int enthält ihren Wert. Eine ganze Zahl wird weiterhin intern als Binärzahl dargestellt. Die Angabe von int in der Basis 10/dezimal erfolgt erst, wenn Sie in eine Zeichenfolge konvertiert haben.

Verwandte Themen