Russian Qt Forum
Апрель 16, 2024, 15:37 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: qint16 и -1  (Прочитано 1455 раз)
Dimas
Чайник
*
Offline Offline

Сообщений: 50



Просмотр профиля
« : Апрель 11, 2022, 15:11 »

Есть простейший код:

Код:
#include <QCoreApplication>
#include <QtCore>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    qint16 n;
    qDebug() << "sizeof " << sizeof(n);

    n=1;
    qDebug() << n << QString::number(n, 16).toUpper();

    n=32767;
    qDebug() << n << QString::number(n, 16).toUpper();

    n=32768;
    qDebug() << n << QString::number(n, 16).toUpper();

    n=-1;
    qDebug() << n << QString::number(n, 16).toUpper();


    return a.exec();
}

Имеем вывод:
Код:
sizeof  2
1 "1"
32767 "7FFF"
-32768 "FFFFFFFFFFFF8000"
-1 "FFFFFFFFFFFFFFFF"

Если в памяти qint16 занимает два байта, то при переполнении, например число 32768 будет отображено как -32768.
Почему QString его выводит как "FFFFFFFFFFFF8000"?
Почему не -1 в HEX не FFFF ?
Как правильно в QString вывести шестнадцатиричное значение -1?
Записан

qt 4.8.6, qt 5.12.4
qtkoder777
Частый гость
***
Offline Offline

Сообщений: 245


Просмотр профиля
« Ответ #1 : Апрель 11, 2022, 16:28 »

16 бит это 4 hex символа. Всё, что после них - мусор, на вывод у Вас идёт 64-разрядное число.
Записан
Dimas
Чайник
*
Offline Offline

Сообщений: 50



Просмотр профиля
« Ответ #2 : Апрель 11, 2022, 19:13 »

Странно это. Если размер известен, почему QString тянет мусор. Отрезать вручную мусор решение не самое красивое, скорее похоже на костыль
Записан

qt 4.8.6, qt 5.12.4
Dimas
Чайник
*
Offline Offline

Сообщений: 50



Просмотр профиля
« Ответ #3 : Апрель 12, 2022, 07:06 »

Похоже в Qt просто нет функции для вывода в HEX этого типа (quint16, qint16, quint8, qint8), т.к. в qstring.h:
Код:
    static QString number(int, int base=10);
    static QString number(uint, int base=10);
    static QString number(long, int base=10);
    static QString number(ulong, int base=10);
    static QString number(qlonglong, int base=10);
    static QString number(qulonglong, int base=10);
    static QString number(double, char f='g', int prec=6);
Записан

qt 4.8.6, qt 5.12.4
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.046 секунд. Запросов: 22.