我正在讀取i2c設備的寄存器,並且返回值的範圍是-32768至32768,帶符號整數。下面是一個例子:Qt將負十六進制字符串轉換爲帶符號整數
# 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超過規定的最大返回值。我需要將十六進制值轉換爲有符號整數,所以我需要將十六進制值視爲用二進制補碼錶示。我沒有在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的輸出的輸入,使用所述C-由基思如此回答:
// Now update the label
int milAmps = stringListSplit[0].toInt(0,16);
qDebug() << "My new result: " << (int16_t)milAmps;
永遠不會使用C風格的演員:) – fasked
@fasked:是啊,舊的習慣很難死去......現在放下我的草坪吧! –
非常感謝這似乎工作,但有沒有任何理由這將是不安全/皺眉? – PhilBot