私はi2cデバイスのレジスタを読んでいますが、戻り値の範囲は-32768〜32768の符号付き整数です。以下は例です:Qtの中Qt負の16進文字列を符号付き整数に変換する
# i2cget -y 3 0x0b 0x0a w
0xfec7
、私はこの値(0xfec7)を取得し、符号付き整数としてQLabelでそれを表示したいです。変数stringListSplit [0]は、値 '0xfec7'を持つQStringです。
// Now update the label
int milAmps = stringListSplit[0].toInt(0,16); // tried qint32
qDebug() << milAmps;
問題は、私は私が指定した最大の戻り値を超えて65223を取得していますこの例のように、私はいつも、符号なし整数を取得しようとするものに関係なくはありません。私は16進値を符号付き整数に変換する必要があるので、2進数を2の補数で表現する必要があります。私はQStringのドキュメントで単純なメソッドを見ていません。 Qtでこれをどのように達成できますか?
注:
QStringのは:: toShort 0返し:
// Now update the label
short milAmps = stringListSplit[0].toShort(0,16);
qDebug() << "My new result: " << milAmps;
stringListSplitの入力[0] '0xfebe' に等しく、Iは-322の出力を得るために、Cを使用してキースが答えたようなスタイルのキャスティング:
// Now update the label
int milAmps = stringListSplit[0].toInt(0,16);
qDebug() << "My new result: " << (int16_t)milAmps;
Cスタイルのキャストを使用することはありません:) – fasked
@fasked:Yeah 、古い習慣が激しく死ぬ...今、私の芝生から降りてください! –
これはうまくいきましたが、これはうまくいくようですが、これは安全でない/何かに悩まされる理由がありますか? – PhilBot