x bits uit een bitstream halen

Ik was bezig met ethernetframes aan het decoderen tot ik mij plots het volgende afvroeg: kan ik de derde en vierde bit van een byte lezen en hoe? Ik weet dat er in de programmeertalen bitwise operators bestaan. Stel dat ik een stream heb van 12 bits en bit 6,7,8 en 9 wil lezen (vier bits dus vanaf positie 6 en positie 1 is uiterst rechts). Het volgende stelt die 12 bits stream voor. De vetgedrukte bits zijn degene die ik wil uitlezen.

0100 0011 1001 (hex: 0x439)

Eerst gaan we de bits rechts wegdoen tot we de eerste bit op positie 6 hebben. Dus de eerste 5 bits vliegen weg.

0100 0011 1001 >> 5 geeft 0100 001 (1)

In een tussenresultaat shift ik de bits weg die ik wil uitlezen en vervang ze door nullen. Dat geeft het volgende tussenresultaat.

0100 001 >> 4 << 4 geeft 0100 000 (2)

Dan trek ik (2) van (1) en bekom ik het getal dat die vier bits voorstelt.

0100 001 – 0100 000 = 0000 0001

Eigenlijk zouden die eerste twee bits nog weg moeten maar dit is onrelevant aangezien we ons resultaat hebben.

Nog een voorbeeldje van bits shiften om te kijken of de derde bit van een gelezen byte gelijk is aan 1 (bv om een flag te controleren).

01011101

01011101 >> 2 geeft 010111 en we gaan die ‘ennen’ met 000001 en dat geeft dan ofwel 1 ofwel 0 als resultaat. In één bewerking kan je een vlag als volgt controleren.

(01011101 >> 2) & 1

Geef een reactie

Vul je gegevens in of klik op een icoon om in te loggen.

WordPress.com logo

Je reageert onder je WordPress.com account. Log uit / Bijwerken )

Twitter-afbeelding

Je reageert onder je Twitter account. Log uit / Bijwerken )

Facebook foto

Je reageert onder je Facebook account. Log uit / Bijwerken )

Google+ photo

Je reageert onder je Google+ account. Log uit / Bijwerken )

Verbinden met %s

%d bloggers op de volgende wijze: