Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [C / C++] Stampa di un numero negativo

    Ciao a tutti,
    vi spiego il mio problema...
    ...ho 3 byte (unsigned char)... devo unirli e formare un int e poi stamparne il valore.

    Il problema è che posso avere anche valori negativi... e ho notato che con certi valori mi vengono dei numeri sballati...

    Io ho fatto così:
    codice:
    unsigned char lowByte;
    unsigned char middleByte;
    unsigned char highByte;
    
    int valore = lowByte | middleByte<<8 | highByte<<16;	
    
    if(highByte & 0x80 == 0x80)
    		valore = (valore-0xFFFFFF)-1;
    printf("Valore: %d\n",valore);
    Probabilmente c'è un modo migliore per farlo!?

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Ma il formato originale dei 3 byte qual e'?

    E' un intero a 24 bit in complemento a due?

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254

    Re: [C / C++] Stampa di un numero negativo

    Originariamente inviato da ZetaSharp
    Ciao a tutti,
    vi spiego il mio problema...
    ...ho 3 byte (unsigned char)... devo unirli e formare un int e poi stamparne il valore.

    Il problema è che posso avere anche valori negativi... e ho notato che con certi valori mi vengono dei numeri sballati...
    Supponendo che i 3 byte formino un valore a 24 bit in complemento a due:

    codice:
    if (highByte & 0x80)
        valore |= 0xFF000000;
    In questo modo "estendi" il segno.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  4. #4

    Re: Re: [C / C++] Stampa di un numero negativo

    Originariamente inviato da andbin
    Supponendo che i 3 byte formino un valore a 24 bit in complemento a due:

    codice:
    if (highByte & 0x80)
        valore |= 0xFF000000;
    In questo modo "estendi" il segno.
    OK ho risolto... grazie mille per il consiglio... in realtà il problema era con la sprintf che mi variava certi valori negativi

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.