PDA

Visualizza la versione completa : [C] interi su 4 byte


DarthSandr
20-10-2008, 09:48
Ciao a tutti.
Ho il seguente problema: ho un numero intero memorizzato su 4 byte in esadecimale.
Devo ricostruire l'intero.

Faccio un esempio:

ho il seguente vettore (unsigned char)



v[0] = 0x00
v[1] = 0x01
v[2] = 0x8E
v[3] = 0x20


e devo ricostruire il numero che e': 101920 (00018E20)

Nel mio codice faccio la seguente cosa.
Il vettore con i byte esadecimali e' un unsigned char[4] v.

E il metodo che uso per ricostruire il numero intero e':



#define BUILD_UINT16_4(b1, b2, b3, b4) \

( (UINT16)((b1 & 0x00FF) + (UINT16)((b2 & 0x00FF) << 8) + (UINT16)((b3 & 0x00FF) << 16) + (UINT16)((b4 & 0x00FF) << 24)) )


E lo richiamo in questo metodo



unsigned long getValuta(unsigned char buf[4]) {
unsigned long res;
res = BUILD_UINT16_4(buf[3], buf[2], buf [1], buf[0]);
return res;
}




Ovviamente in buf passo v.

Il problema e' che l'intero che ottengo e' 00008E20 e non 00018E20.

Dove sbaglio?

Ciao e grazie
Sandro

oregon
20-10-2008, 11:10
Sbagli in quella macro ... fai attenzione alle parentesi



#define BUILD_UINT16_4(b1, b2, b3, b4) \
((UINT16)(b1 & 0x00FF) + \
((UINT16)(b2 & 0x00FF) << 8) + \
((UINT16)(b3 & 0x00FF) << 16) + \
((UINT16)(b4 & 0x00FF) << 24))

Loading