我正在读取 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;
对于等于 '0xfebe' 的 stringListSplit[0] 的输入,我使用 Keith 回答的 C 风格转换得到 -322 的输出,如下所示:
// Now update the label
int milAmps = stringListSplit[0].toInt(0,16);
qDebug() << "My new result: " << (int16_t)milAmps;