Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Dimas от Апрель 11, 2022, 15:11



Название: qint16 и -1
Отправлено: Dimas от Апрель 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?


Название: Re: qint16 и -1
Отправлено: qtkoder777 от Апрель 11, 2022, 16:28
16 бит это 4 hex символа. Всё, что после них - мусор, на вывод у Вас идёт 64-разрядное число.


Название: Re: qint16 и -1
Отправлено: Dimas от Апрель 11, 2022, 19:13
Странно это. Если размер известен, почему QString тянет мусор. Отрезать вручную мусор решение не самое красивое, скорее похоже на костыль


Название: Re: qint16 и -1
Отправлено: Dimas от Апрель 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);