Извлечение и объединение битов из разных байтов c c ++
Я объявил массив байтов:
uint8_t memory[123];
который я заполнил:
memory[0]=0xFF;
memory[1]=0x00;
memory[2]=0xFF;
memory[3]=0x00;
memory[4]=0xFF;
И теперь я получаю запросы от пользователя на конкретные биты. Например, я получаю запрос на отправку битов в позиции 10:35, и я должен вернуть эти биты, объединенные в байтах. В этом случае мне нужно 4 байта, которые содержат.
response[0]=0b11000000;
responde[1]=0b00111111;
response[2]=0b11000000;
response[3]=0b00000011; //padded with zeros for excess bits
Это будет использоваться для Modbus, который является протоколом с прямым порядком байтов. Я придумал следующий код:
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;
}
который не работает, но должен быть близок к идеальному решению. Какие-либо предложения?