|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Junior Member
Iscritto dal: Aug 2008
Messaggi: 3
|
[C] Estrarre intero a 2byte da un array di bytes (stream TCP)
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? Non sara' mica necessario copiare byte per byte ogni dato in un array apposito? Spero di no.. grazie in anticipo |
![]() |
![]() |
![]() |
#2 |
Junior Member
Iscritto dal: Aug 2008
Messaggi: 3
|
Salve,
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); 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. |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Cosi' puo' andare?
Codice:
char msg[50]; ... char* p_primochar=(char*)msg; char primochar=*p_primochar; int* p_primoval = (int*)(msg+1); int primoval=*p_primoval; int* p_secondoval = (int*)(msg+5); int secondoval=*p_secondoval; printf("%d %d",primoval,secondoval); Se vuoi usare il C o il C++ ti consiglio di studiare bene i puntatori.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. Ultima modifica di gugoXX : 06-08-2008 alle 21:37. |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Vedo che gugoXX ha già spiegato bene come prendere due byte alla volta con un utilizzo sapiente dei puntatori, invece per rigenerare una word partendo da due byte puoi fare in modo simile:
Codice:
uint8_t lo = 0x34; uint8_t hi = 0x12; uint16_t word; word = (lo | hi << 8); ciao ![]()
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 15:47.