Qt конвертировать отрицательную шестнадцатеричную строку в целое число со знаком

Я читаю регистры устройства i2c, и диапазон возвращаемого значения составляет от -32768 до 32768, целые числа со знаком. Ниже приведен пример:

# i2cget -y 3 0x0b 0x0a w
0xfec7

В Qt я получаю это значение (0xfec7) и хочу отобразить его в QLabel в виде целого числа со знаком. Переменная stringListSplit [0] является QString со значением ‘0xfec7’.

// Now update the label
int milAmps = stringListSplit[0].toInt(0,16); // tried qint32
qDebug() << milAmps;

Проблема не в том, что я пытаюсь, я всегда получаю целые числа без знака, поэтому в этом примере я получаю 65223, что превышает указанное максимальное возвращаемое значение. Мне нужно преобразовать шестнадцатеричное значение в целое число со знаком, поэтому мне нужно обрабатывать шестнадцатеричное значение как выражение с дополнением 2s. Я не вижу простой метод в документации 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;

5

Решение

Приведите ваш результат к 16-разрядному целому числу со знаком.

qDebug() << (int16_t)milAmps;
3

Другие решения

Вам необходимо преобразовать эту строку в 16-разрядное целое число. Скорее всего, вы можете использовать QString::toShort метод.

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

По вопросам рекламы [email protected]