Originariamente inviato da vv1984
Ciao grazie mille per la disponibilita', non riusciamo pero' a fare quello che vogliamo;
Abbiamo questa situazione qua noi:
nelle posizioni dell'array (array di char) ci sono memorizzati questi valori (8 bit ogni elemento).
array[5]=65; /*(10000010 little endian)*/
array[6]=31; /*(11111000 little endian)*/
uint8_t tmp = array[5];
uint8_t tmp2 = array[6];
uint16_t res =0;
Ora io voglio avere in res un intero a 16 bit che mi rappresenti il numero 8001 (1000001011111000) che sarebbe la concatenazione del contenuto in bit di tmp e tmp2.
Noi facciamo questa cosa:
res = res | tmp2; /* Dovrebbe essere cosi': 1111100000000000*/
res = res >> 8; /* Dovrebbe essere cosi': 0000000011111000*/
res = res | tmp; /* Dovrebbe esere cisi': 1000001011111000 = 8001*/
printf("res = %d \n", res); /* Dovrebbe stampare 8001*/
Purtroppo viene stampato 65 cioe' tmp, come se gli altri 8 bit restanti fossero diventati 0.
Abbiamo provato a fare come ci hai consigliato ma ci restituisce dei valori molto strani dentro la struttura.
Scusa per il disturbo e grazie per un eventuale risposta.
Saluti.