Ich bin in letzter Zeit auf ein interessantes Problem gestoßen:
Sagen wir mal, ich habe ein Array von Bytes (uint8_t genau genommen) der Länge mindestens eins. Jetzt brauche ich eine Funktion, die eine Teilfolge von Bits aus diesem Array abruft, beginnend mit Bit X (nullbasiert indexiert, inklusive) und einer Länge L, und dies als uint32_t zurückgibt. Wenn L kleiner als 32 ist, sollten die übrigen hohen Bits null sein.
Auch wenn dies nicht sehr schwer zu lösen ist, erscheinen mir meine aktuellen Gedanken darüber etwas umständlich. Ich denke an eine Tabelle aller möglichen Masken für ein bestimmtes Byte (beginne mit Bit 0-7, nimm 1-8 Bits) und konstruiere dann die Zahl Byte für Byte mit dieser Tabelle.
Kann jemand eine elegantere Lösung finden? Beachten Sie, dass ich dafür Boost oder STL nicht verwenden kann - und nein, es handelt sich nicht um eine Hausaufgabe, sondern um ein Problem, dem ich bei der Arbeit begegnet bin und wir verwenden Boost oder STL nicht im Code, in dem dieses Ding erscheint. Sie können davon ausgehen, dass: 0 < L <= 32 und dass das Byte-Array groß genug ist, um die Teilfolge aufzunehmen.
Ein Beispiel für korrekte Eingabe/Ausgabe:
Array: 00110011 1010 1010 11110011 01 101100
Teilfolge: X = 12 (nullbasiertes Index), L = 14
resultierendes uint32_t = 00000000 00000000 00 101011 11001101