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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: dec2hex с лидирующими нулями [РЕШЕНО]  (Прочитано 5763 раз)
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


Раньше как-то делал, но код утерян, забыл Улыбающийся

Спасибо!
« Последнее редактирование: Май 06, 2012, 23:18 от simark1979 » Записан
Serr500
Гость
« Ответ #1 : Май 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);
« Последнее редактирование: Май 06, 2012, 20:34 от Serr500 » Записан
simark1979
Гость
« Ответ #2 : Май 06, 2012, 20:35 »

Код:
unsigned char uc;
QString S = QString::number(uc);
if (uc < 0x10)
    S = "0" + S;

Спасибо!
Если ничего лаконичней не придумаем, будем использовать этот вариант, но можно обойтись готовыми библиотеками Qt Улыбающийся делал точно (тогда тоже потерял много времени, но решил)
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #3 : Май 06, 2012, 20:37 »

Код
C++ (Qt)
unsigned char c = 8;
QString hex = QString("%1").arg(c, 2, 16, '0');
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
simark1979
Гость
« Ответ #4 : Май 06, 2012, 20:41 »

Код
C++ (Qt)
unsigned char c = 8;
QString hex = QString("%1").arg(c, 2, 16, '0');

Так пробовал:
Результат:
"8.000000000000000000000000000000000000000000000000"
Записан
simark1979
Гость
« Ответ #5 : Май 06, 2012, 20:44 »

Код
C++ (Qt)
unsigned char c = 8;
QString hex = QString("%1").arg(c, 2, 16, '0');

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

Скажу больше. если с=25;
Результат:
"25.000000000000000000000000000000000000000000000000"
т.е. нет никакого переобразования
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #6 : Май 06, 2012, 20:44 »

значит символ нуля оберни в QChar
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
simark1979
Гость
« Ответ #7 : Май 06, 2012, 20:48 »

значит символ нуля оберни в QChar
Вот!!!
Заработало Улыбающийся

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

Огромное спасибо!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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