2012-09-04 74 views
5

私は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; 

答えて

3

結果を符号付き16ビット整数にキャストします。

qDebug() << (int16_t)milAmps; 
+0

Cスタイルのキャストを使用することはありません:) – fasked

+0

@fasked:Yeah 、古い習慣が激しく死ぬ...今、私の芝生から降りてください! –

+0

これはうまくいきましたが、これはうまくいくようですが、これは安全でない/何かに悩まされる理由がありますか? – PhilBot

4

この文字列を16ビット整数に変換する必要があります。おそらくQString::toShortメソッドを使用することができます。

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

これは何も印刷されません。理由は何ですか? – PhilBot

+0

'toShort'メソッドは、エラーが発生した場合に' 0'を返します。 'stringListSplit [0]'は正しい文字列ですか? – fasked

+0

おそらく入力が範囲外であると不平を言うでしょう。整数として解析してキャストする必要があります。 –

関連する問題