5

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を取得しています。16進値を符号付き整数に変換する必要があるため、16進値を2の補数で表されるものとして扱う必要があります。QStringのドキュメントに簡単なメソッドが表示されていません。Qtでこれをどのように達成できますか?

ノート:

QString :: toShortは0を返します:

// Now update the label
short milAmps = stringListSplit[0].toShort(0,16);
qDebug() << "My new result: " << milAmps;

'0xfebe'に等しいstringListSplit[0]の入力の場合、次のようにキースが回答したCスタイルのキャストを使用して-322の出力を取得します。

// Now update the label
int milAmps = stringListSplit[0].toInt(0,16);
qDebug() << "My new result: " << (int16_t)milAmps;
4

2 に答える 2

4

この文字列を16ビット整数に変換する必要があります。ほとんどの場合、QString::toShortメソッドを使用できます。

short milAmps = stringListSplit[0].toShort(0,16); 
qDebug() << milAmps;
于 2012-09-04T19:59:23.147 に答える
3

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

qDebug() << (int16_t)milAmps;
于 2012-09-04T19:59:55.207 に答える