X muss ja nicht ein Byte sein
Edit: Nun gut, man muss natürlich immer in 8er Schritten gehen bis letztendlich die Anzahl <= 8 ist, wo man dann halt das shiften braucht.
Sonst kann man ja ganze Bytes nehmen!
Beispiel Pseudocode
Code:
ByteArray[0..3] = (255, 128, 0, 0) = (11111111, 10000000, 00000000, 00000000) // zB
pBytes = @ByteArray
Anzahl = 12
result = 0
while Anzahl > do
Result = (Result shl 8) or pBytes^
dec(Anzahl, 8)
inc(pBytes)
while Anzahl > 0 do
Result = (Result shl 1) or (pBytes^ and 1)
dec(Anzahl)
Hier erhält man dann 111111111000b (4088d).
Anmerkung - diese Methode startet bei 0. Man müsste es so modifizieren, dass es auch mit nem anderen Offset klappt, ich will ihm aber die Arbeit nicht wegnehmen!