2012-09-04 15 views
5

Sto leggendo i registri di un dispositivo i2c e l'intervallo del valore di ritorno è compreso tra -32768 e 32768, numeri interi con segno. Di seguito è riportato un esempio:Qt Converti stringa esadecimale negativa a numero intero con segno

# i2cget -y 3 0x0b 0x0a w 
0xfec7 

In Qt, ottengo questo valore (0xfec7) e si desidera visualizzare in un QLabel come intero con segno. La variabile stringListSplit [0] è una QString con il valore '0xfec7'.

// Now update the label 
int milAmps = stringListSplit[0].toInt(0,16); // tried qint32 
qDebug() << milAmps; 

Il problema è non importa quello che provo ottengo sempre numeri interi senza segno, quindi per questo esempio sto ottenendo 65223 che eccede il valore massimo ritorno specificato. Ho bisogno di convertire il valore esadecimale in un intero con segno, quindi devo considerare il valore esadecimale come espresso con il complemento 2s. Non vedo un metodo semplice nella documentazione di QString. Come posso ottenere questo in Qt?

NOTA:

QString :: toShort restituisce 0:

// Now update the label 
short milAmps = stringListSplit[0].toShort(0,16); 
qDebug() << "My new result: " << milAmps; 

Per un ingresso di stringListSplit [0] uguale a '0xfebe', ottengo una potenza di -322, utilizzando il C- fusione stile risposto con Keith in questo modo:

// Now update the label 
int milAmps = stringListSplit[0].toInt(0,16); 
qDebug() << "My new result: " << (int16_t)milAmps; 

risposta

3

Trasmetti il ​​risultato a un numero intero a 16 bit con segno.

qDebug() << (int16_t)milAmps; 
+0

non usare mai il casting in stile C :) – fasked

+0

@fasked: Sì , le vecchie abitudini sono dure a morire ... Ora scendi dal mio prato! –

+0

bene, grazie, sembra funzionare, ma c'è qualche ragione per cui questo sarebbe pericoloso/accigliato? – PhilBot

4

è necessario convertire questa stringa per intero a 16 bit. È molto probabile che tu possa utilizzare il metodo QString::toShort.

short milAmps = stringListSplit[0].toShort(0,16); 
qDebug() << milAmps; 
+0

Questa stampa 0. Qualche idea sul perché? – PhilBot

+0

Il metodo 'toShort' può restituire '0' se si verifica un errore. Sei sicuro che 'stringListSplit [0]' è una stringa corretta? – fasked

+0

Probabilmente si lamenta che l'input è fuori portata. Avrai bisogno di analizzare come intero e scartarlo. –

Problemi correlati