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;