Qt将负十六进制字符串转换为有符号整数

时间:2012-09-04 19:53:53

标签: c++ qt signed hex

我正在读取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;

2 个答案:

答案 0 :(得分:4)

您需要将此字符串转换为16位整数。您最有可能使用QString::toShort方法。

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

答案 1 :(得分:3)

将结果转换为带符号的16位整数。

qDebug() << (int16_t)milAmps;