aus 2 Bytes auslesen

martinpriebe

Erfahrenes Mitglied
Hallo,

Ich habe ein 2 Bytes. (die zusammen gehören)
(15) (240)
00001111 11110000

So nun möchte ich den Wert bestimmen der ersten 10 Bits.
(von rechts beginnend)

quasi das hier ..
(1008)
11 11110000


Wie stelle ich das am besten an ? das linke Byte shiften ?


Und kann ich auch direkt prüfen ob ein Bit gesetzt ist ?
z.B. Byte rein - raus kommt ob Bit 14 gesetzt ist oder nicht ?


Oder noch ein Bsp.
ich habe ein Byte 0xC9
und ein anders Byte 0x1A

Jetzt möchte ich den Wert errechnen des zweiten bytes und der hälfte des ersten byte also 91A
und danach was für ein Wert die eine hälfte des ersten bytes, hier das C, ist.

danke im vorraus
Martin
 
Zuletzt bearbeitet:
Hallo,

die betreffenden Bytes werden erstmal zusammengeführt (OR) wobei für die höherwertigen Bytes ein Bitshift erforderlich ist.
Um bestimmte Bits bzw, Bitbereiche zu testen wird eine Maskierung durchgeführt (AND). Die Maske enthält jeweils eine "1" für alle benötigten oder zu testenden Bits.
Zu deinem ersten Beispiel:
C#:
byte byteHi = 15;
byte byteLo = 240;
            
// Bytes OR-Vernüpfen, dabei BitShift für höherwertiges Byte
// Maske für die untersten 10 Bit durch eine AND-Verknüpfung
int nResult = (byteLo | (byteHi << 8)) & 0x3FF;
Die zweite Textaufgabe ist mir jetzt kurz vorm Feierabend zu mühselig :)
Sie läßt sich aber auch nach den o.g. Prinzipien lösen.

Gruß
MCoder
 
Hallo,

Ich habe ein 2 Bytes. (die zusammen gehören)
(15) (240)
00001111 11110000

So nun möchte ich den Wert bestimmen der ersten 10 Bits.
(von rechts beginnend)

quasi das hier ..
(1008)
11 11110000
Oder hast du sowas in der Art gesucht:confused:
Code:
string s = "00001111 11110000";
List<bool> list = new List<bool>();
foreach (char c in s)
{
    if (c != ' ')
        list.Add(c == '1');
}
list.Reverse();

int v = 0;
for (int i = 0; i < 10; i++)

   if (list[i])
       v += (int)Math.Pow(2, i);
}
 
Zurück