LINUX.ORG.RU

dec to hex


0

1

В интернете валом примеров, но все они не в нужном направлении решаются.

вообщем вопрос:

int a = 32;

char h[3];

.... прошу помочь, что тут написать?

h[2]='\0';

printf(«hex 32 = %s»);

и второй вопрос

int a = 1020;

char h[5];

.... и что тут написать?

h[4]='\0'; printf(«hex 1020 = %s»);

я топчусь наместе, для профи наверное 2 строчки кода.



Последнее исправление: mordovorot (всего исправлений: 1)

1

h[0] = a / 16;
h[1] = a % 16;

2

h[0] = a / 16 / 16 / 16;
h[1] = a / 16 / 16 % 16;
h[2] = a / 16 % 16;
h[3] = a % 16;

Можно оформить в виде цикла, чтобы убрать повторения. Также можно использовать побитовые операции, хотя вряд ли это что то изменит.

Legioner ★★★★★
()
Ответ на: комментарий от Legioner

>h[0] = a / 16;

А '0' кто будет прибавлять? И смещение на 7 вводить, если результат больше 9? :)

...

Вспомнилось. Когда-то был конкурс на минимальный код печати шестнадцатеричного числа из AX. Рекорд был, ЕМНИП, в 9 байт :) Я, кажется, только в 11 уложился...

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

Ой, что то туплю на ночь глядя. Ну да, так прямо просто не получится, функцию надо вводить.

В общем как то так:

char bitstohex(int bits) {
    return bits < 10 ? '0' + bits : 'a' + bits - 10;
}
...

h[0] = bitstohex(a/16);
Ну и аналогично ко всем остальным присваиваниям.

Legioner ★★★★★
()
Ответ на: комментарий от congestion_control

Остановился именно на этом способе,

sprintf(h, «%x», a);

огромное Вам спасибо за простое решение! видели бы вы портянку какую я писал час назад.

а массив не хочется делать больше, кстати программирую «для себя» не для препода, хотя как правильно заметили студент :)

Форум спасибо!

mordovorot
() автор топика
Ответ на: комментарий от scaldov

На число байтов посмотри в исходной задаче. И посмотри на разрядность %x :)

KRoN73 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.