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)

codice:
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':

codice:
#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

codice:
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