Die routine 'bouwt' een integer van een selectie van 4 opeenvolgende bytes uit een array losse bytes die hij aangeleverd krijgt (de 'in[]' array). Hiervoor gebruikt hij onder andere de zogenaamde 'bitwise AND' en de 'bitwise OR': deze operaties vergelijken individuele bits en geven als uitkomst telkens 0 of 1. Eerst een korte uitleg over deze twee operaties:
Bij een bitwise 'AND' operatie (symbool '&') vergelijk je twee bits, en als deze beide '1' zijn is de uitkomst ook '1', anders is de uitkomst '0'. Deze vergelijking kun je ook uitvoeren op hele bit-arrays ('00101010' is een bit-array van 8 elementen, dus een byte) en zo vorm je een nieuwe bit-array die '1'tjes heeft staan op de plaatsen waar beide inputarrays dat ook hebben, en '0' op alle andere plekken.
Een voorbeeld:
01100110 & 11000101 = 01000100
Waarom?
Je ziet dat de output-array alleen maar 1'tjes heeft waar beide inputarrays 1'tjes hadden staan.
'Bitwise OR' (symbool '|') is bijna hetzelfde, alleen heeft de output-array nu 1'tjes waar op zijn minst een van beide inputarrays een 1'tje had staan. Gebruiken we de vorige inputarrays nog eens hiervoor, dan krijgen we:
01100110 | 11000101 = 11100111
Goed, nu verder naar de routine die je postte. De routine pakt 4 bit-arrays van 8 elementen elk (bytes dus) en 'naait' die aan elkaar tot een grote bit-array van 32 bits: een integer (die dus een grootte heeft van 4 bytes). Die 4 bytes worden achterstevoren achter elkaar gezet (vandaar het 'convert little to big endian: little-endian en big-endian zijn manieren om getallen van meerdere bytes op te slaan, geloof ik: de ene of de andere kant op). Hierbij wordt ook 'bit shifting' gebruikt:
Bijvoorbeeld een bit-shift van het getal 9 (bit-array '00001001'):
00001001 << 4 = 10010000.
Hierbij is de hele serie bits gewoon 4 plaatsen naar links opgeschoven, en zijn de vrijgekomen plaatsen opgevuld met nullen. Omdat iedere bit-shift naar links overeen komt met een vermenigvuldiging van 2, resulteert die bit-shift van net in een getal dat 16 keer zo groot is als 9: namelijk 144 (tel na!).
Een bit-shift van 8 plaatsen naar links, zoals in de code gebeurt, komt dus overeen met het verminigvuldigen van het getal met 256 (2^8). Daarmee wordt dus ruimte gemaakt voor de volgende 8-delige bit-array die ingevoegd wordt - en zo wordt de lange bit-array van 32 elementen opgebouwd uit 4 kortere van 8 elementen elk.