Qt: преобразовать десятичное число в шестнадцатеричное с 4 байтами - PullRequest
1 голос
/ 17 апреля 2019

Я использую Qt для преобразования десятичной дроби в шестнадцатеричную строку

QString hexvalue = QString("%1").arg(decimal, 8, 16, QLatin1Char( '0' ));

Я хочу иметь

1: 00 00 00 01

-1: FF FF FF FF

Этот код, однако, приводит к

FF FF FF FF FF FF FF FF и 00 00 00 01

Как я могу ограничить это 4 байтами?

1 Ответ

0 голосов
/ 17 апреля 2019

Вы можете использовать маску с оператором AND, чтобы сделать это:

int val = -1;
qDebug() << QString("%1 : %2").arg(val).arg(val & 0xffffffff, 8, 16, QLatin1Char('0'));

будет отображаться

"- 1: ffffffff"

EDIT

Как и было запрошено в комментариях, вот один из способов иметь переменную length в диапазоне 0 < length <= 8:

int mask = 0xffffffff >> (32 - 4 * length); // assuming a 32 bit integer
int val = -1;
qDebug() << QString("%1 : %2").arg(val).arg((unsigned int)(val & mask), length, 16, QLatin1Char('0'));
...