我正在读取i2c设备的寄存器,返回值的范围是-32768至32768,即有符号整数。以下是一个示例:
当输入的stringListSplit[0]等于'0xfebe'时,使用Keith提供的C风格转换,我得到了一个输出为-322。
# i2cget -y 3 0x0b 0x0a w
0xfec7
在Qt中,我得到了这个值(0xfec7),想要将它作为有符号整数显示在QLabel中。变量stringListSplit [0]是一个值为'0xfec7'的QString。
// Now update the label
int milAmps = stringListSplit[0].toInt(0,16); // tried qint32
qDebug() << milAmps;
问题在于不管我怎么尝试,总是得到无符号整数,所以对于这个例子,我得到了65223,它超过了指定的最大返回值。我需要将十六进制值转换为有符号整数,因此我需要将其视为使用2s补码表示的十六进制值。然而,在QString文档中我没有看到简单的方法。如何在Qt中实现此目的?
注意:
QString::toShort返回0:
// Now update the label
short milAmps = stringListSplit[0].toShort(0,16);
qDebug() << "My new result: " << milAmps;
当输入的stringListSplit[0]等于'0xfebe'时,使用Keith提供的C风格转换,我得到了一个输出为-322。
// Now update the label
int milAmps = stringListSplit[0].toInt(0,16);
qDebug() << "My new result: " << (int16_t)milAmps;
toShort
方法如果出现错误可能会返回0
。您确定stringListSplit[0]
是正确的字符串吗? - fasked