Ciao a tutti,ho un'applicazione che mi manda un messaggio cosi composto (vi indico all'interno dell'array le posizioni occupate da ogni dato) tramite stream TCP:

msg[0]: un char (che non mi interessa)

msg[1-4]: un int che vorrei stampare

msg[5-6]: uno short int che vorrei stampare

Per ora riesco sempre e solo a stampare la prima posizione di questi dati, percio' per puro caso l'int in posizione 1-4 (essendo in littleendian)
mi viene stampato correttamente (e' infatti un intero <9).

Come faccio a far capire al programma che il dato che voglio stampare occupa piu' di una posizione nell'array?
Ho provato cosi, ma ancora non ottengo il risultato sperato:

codice:
uint16_t res;
uint8_t tmp, tmp2;
tmp=65;
tmp2=31;
res = res | tmp2;
res = res >> 8;
res = res | tmp;
printf (" res = %d \n", res);
sono riuscito a risolvere il problema di mettere in un unica variabile a 16 bit il contenuto di due posizioni del mio array, ora pero' non riesco a stampare la mia variabile a 16 bit, me ne stampa solo 8.
La printf() mi stampa il valore 65 (cioe' tmp), quando io vorrei che stampasse tutti e 16 i bit (cioe' il valore 8001).

Non riesco a capire dove sbaglio, qualcuno sa indicarmi il problema ?

Grazie in anticipo.