我正在读取i2c设备的寄存器,返回值的范围是-32768到32768,有符号整数。以下是一个例子:
# 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',我得到-322的输出,使用由Keith回答的C风格的转换,如下所示:
// Now update the label
int milAmps = stringListSplit[0].toInt(0,16);
qDebug() << "My new result: " << (int16_t)milAmps;
答案 0 :(得分:4)
您需要将此字符串转换为16位整数。您最有可能使用QString::toShort
方法。
short milAmps = stringListSplit[0].toShort(0,16);
qDebug() << milAmps;
答案 1 :(得分:3)
将结果转换为带符号的16位整数。
qDebug() << (int16_t)milAmps;