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?