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;
nunca use el estilo C de fundición :) – fasked
@fasked: Yeah , los viejos hábitos se mueren duro ... Ahora sal de mi césped! –
bien, gracias. Parece que funciona, pero ¿hay alguna razón por la cual esto sería inseguro/mal visto? – PhilBot