PDA

Visualizza la versione completa : [C/C++] Stampa di un numero negativo


ZetaSharp
10-10-2006, 11:21
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ì:


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!? :confused:

oregon
10-10-2006, 12:08
Ma il formato originale dei 3 byte qual e'?

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

andbin
10-10-2006, 12:22
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:


if (highByte & 0x80)
valore |= 0xFF000000;
In questo modo "estendi" il segno.

ZetaSharp
10-10-2006, 16:25
Originariamente inviato da andbin
Supponendo che i 3 byte formino un valore a 24 bit in complemento a due:


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

Loading