2012-09-04 30 views
5

Estoy leyendo los registros de un dispositivo i2c y el rango del valor de retorno es -32768 a 32768, enteros con signo. A continuación se muestra un ejemplo:Qt Convertir cadena hexadecimal negativa al entero con signo

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

En Qt, consigo este valor (0xfec7) y quiero mostrarlo en un QLabel como un entero con signo. La variable stringListSplit [0] es un QString con el valor '0xfec7'.

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

El problema es, no importa lo que intento siempre me enteros sin signo, por lo que para este ejemplo que estoy recibiendo 65223 que excede el valor máximo rendimiento específico. Necesito convertir el valor hexadecimal en un entero con signo, por lo que necesito tratar el valor hexadecimal como expresado con el complemento 2s. No veo un método simple en la documentación de QString. ¿Cómo puedo lograr esto en Qt?

NOTA:

QString :: toShort devuelve 0:

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

para una entrada de stringListSplit [0] igual a '0xfebe', consigo una potencia de -322, utilizando el C- fundición de estilo respondida por Keith así:

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

Respuesta

3

Envía el resultado a un entero de 16 bits con signo.

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

nunca use el estilo C de fundición :) – fasked

+0

@fasked: Yeah , los viejos hábitos se mueren duro ... Ahora sal de mi césped! –

+0

bien, gracias. Parece que funciona, pero ¿hay alguna razón por la cual esto sería inseguro/mal visto? – PhilBot

4

es necesario convertir esta cadena a entero de 16 bits. Es muy probable que pueda usar el método QString::toShort.

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

Esto imprime 0. ¿Alguna idea de por qué? – PhilBot

+0

El método 'toShort' puede devolver' 0' si ocurre un error. ¿Estás seguro de que 'stringListSplit [0]' es la cadena correcta? – fasked

+0

Probablemente quejándose de que la entrada está fuera de rango. Tendrá que analizar como un entero y descartarlo. –

Cuestiones relacionadas