Extrahieren und kombinieren Sie Bits aus verschiedenen Bytes c c ++

Ich habe ein Array von Bytes deklariert:

uint8_t memory[123];

mit denen ich gefüllt habe:

memory[0]=0xFF;
memory[1]=0x00;
memory[2]=0xFF;
memory[3]=0x00;
memory[4]=0xFF;

Und jetzt bekomme ich Anfragen vom Benutzer für bestimmte Bits. Zum Beispiel erhalte ich eine Aufforderung, die Bits an Position 10:35 zu senden, und ich muss diese Bits in Bytes kombiniert zurückgeben. In diesem Fall würde ich 4 Bytes benötigen, die enthalten.

response[0]=0b11000000;
responde[1]=0b00111111;
response[2]=0b11000000; 
response[3]=0b00000011; //padded with zeros for excess bits

Dies wird für Modbus verwendet, bei dem es sich um ein Big-Endian-Protokoll handelt. Ich habe folgenden Code gefunden:

for(int j=findByteINIT;j<(findByteFINAL);j++){

   aux[0]=(unsigned char) (memory[j]>>(startingbit-(8*findByteINIT)));
   aux[1]=(unsigned char) (memory[j+1]<<(startingbit-(8*findByteINIT)));

   response[h]=(unsigned char) (aux[0] | aux[1] );
   h++;

   aux[0]=0x00;//clean aux
   aux[1]=0x00;

        }

Das funktioniert nicht, sollte aber der idealen Lösung nahe kommen. Irgendwelche Vorschläge?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage