Visualizzazione dei risultati da 1 a 2 su 2

Discussione: [C] interi su 4 byte

  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    331

    [C] interi su 4 byte

    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

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Sbagli in quella macro ... fai attenzione alle parentesi

    codice:
    #define BUILD_UINT16_4(b1, b2, b3, b4) \
    	 ((UINT16)(b1 & 0x00FF) + \
    	 ((UINT16)(b2 & 0x00FF) << 8) + \
    	 ((UINT16)(b3 & 0x00FF) << 16) + \
    	 ((UINT16)(b4 & 0x00FF) << 24))
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.