#qt #type-conversion #hex
#qt #преобразование типов #шестнадцатеричная
Вопрос:
Я использую 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. вы имеете в виду, что 1 анализируется в FF FF FF FF FF FF FF FF FF FF ???? o0?
2. Нет -1 выводится как
FF FF FF FF FF FF FF FF
3. Использование
QString("%1").arg(ulong(decimal), 8, 16, QLatin1Char( '0' ))
4. Почему ulong (unsigned long) ? Код должен корректно работать с отрицательными числами.
Ответ №1:
Для этого можно использовать маску с оператором AND :
int val = -1;
qDebug() << QString("%1 : %2").arg(val).arg(val amp; 0xffffffff, 8, 16, QLatin1Char('0'));
отобразится
«-1: ffffffff»
Редактировать
Как и было запрошено в комментариях, вот один из способов получить переменную 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 amp; mask), length, 16, QLatin1Char('0'));
Комментарии:
1. Хорошо, но что, если я хочу, чтобы длина (8) была переменной?
2. предполагая 32-битное целое число, тогда уродливый взлом был бы
int mask = 0xffffffff >> (32 - 4 * length);
с 0 < length <= 8 плюс приведение(unsigned int)(val amp; mask)
.3. Можете ли вы обновить ответ, чтобы было очевидно, как реализовать комментарий в коде.