Russian Qt Forum

Qt => Вопросы новичков => Тема начата: simark1979 от Май 06, 2012, 20:04



Название: dec2hex с лидирующими нулями [РЕШЕНО]
Отправлено: simark1979 от Май 06, 2012, 20:04
Добрый день!

Кто подскажет, как красиво получить hex-строку из unsigned char, причём если hex-значение меньше 10, надо получить лидирующий ноль. (т.е. (dec)10 -> (hex)0A)

Это работает, но нет лидирующего нуля:
QString("Decimal 10 is %1 in hexadecimal").arg(10, 0, 16);
Результат: 10->A; а надо 10->0A

И это работает, но также нет лидирующего нуля:
QString("Decimal 10 is %1 in hexadecimal").arg(QString::number(10, 16);
Результат: 10->A; а надо 10->0A


Раньше как-то делал, но код утерян, забыл :)

Спасибо!


Название: Re: dec2hex с лидирующими нулями?
Отправлено: Serr500 от Май 06, 2012, 20:28
Код:
unsigned char uc;
QString S = QString::number(uc);
if (uc < 0x10)
    S = "0" + S;

или так

Код:
    QString S;
    unsigned char uc;
    S.sprintf("%02X", uc);


Название: Re: dec2hex с лидирующими нулями?
Отправлено: simark1979 от Май 06, 2012, 20:35
Код:
unsigned char uc;
QString S = QString::number(uc);
if (uc < 0x10)
    S = "0" + S;

Спасибо!
Если ничего лаконичней не придумаем, будем использовать этот вариант, но можно обойтись готовыми библиотеками Qt :) делал точно (тогда тоже потерял много времени, но решил)


Название: Re: dec2hex с лидирующими нулями?
Отправлено: kambala от Май 06, 2012, 20:37
Код
C++ (Qt)
unsigned char c = 8;
QString hex = QString("%1").arg(c, 2, 16, '0');


Название: Re: dec2hex с лидирующими нулями?
Отправлено: simark1979 от Май 06, 2012, 20:41
Код
C++ (Qt)
unsigned char c = 8;
QString hex = QString("%1").arg(c, 2, 16, '0');

Так пробовал:
Результат:
"8.000000000000000000000000000000000000000000000000"


Название: Re: dec2hex с лидирующими нулями?
Отправлено: simark1979 от Май 06, 2012, 20:44
Код
C++ (Qt)
unsigned char c = 8;
QString hex = QString("%1").arg(c, 2, 16, '0');

Так пробовал:
Результат:
"8.000000000000000000000000000000000000000000000000"

Скажу больше. если с=25;
Результат:
"25.000000000000000000000000000000000000000000000000"
т.е. нет никакого переобразования


Название: Re: dec2hex с лидирующими нулями?
Отправлено: kambala от Май 06, 2012, 20:44
значит символ нуля оберни в QChar


Название: Re: dec2hex с лидирующими нулями?
Отправлено: simark1979 от Май 06, 2012, 20:48
значит символ нуля оберни в QChar
Вот!!!
Заработало :)

Работающий код:
unsigned char c = 10;
QString hex = QString("%1").arg(c, 2, 16, QChar('0'));

Огромное спасибо!