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

De prijzen bij coca-cola

Als je je even verveelt, begin je zaken als volgende te berekenen. Ik zag op een prijslijst een blik cola voor €1.2 en een flesje voor €1.6. Een blikje bevat 33cl drank en een flesje 50cl. Een kleine berekening zegt ons dat 17cl maar €0.4 kost. Dat is €0.02/cl. We rekenen nu terug en komen uit dat een blik maar €0.66 kost en een flesje €1. Met andere woorden minstens 37% winst per blik/fles.

Butters: draft 3

Omdat draft 2 van Butters ietsje teveel voorstudie vereist en te groot is voor een persoonlijk (jullie mogen hem ook gebruiken hoor :)) framework, heb ik een derde draft gemaakt. De taal wordt PHP omdat mijn hosting geen Python ondersteund en ik geen server ga huren speciaal voor Python. Het framework wordt een Modulair MVC design. De belangrijkste componenten zijn:

  • Application: configuratie en dispachting proces
  • Page: controller aspect van MVC
  • Router: zoekt uit welke Module, Page en Action en URL parameters op.
  • View: beheert de layout en view scripts.
  • Model: het model aspect (Model_Database -> Model_Database_MySQL en Model_File)
  • Output: bepaalt de content-type en echo’d de view data.

Eenmaal het framework af, kan ik dit gaan toepassen voor mijn cursussysteem.