konwersja/zamiana z systemu dziesietnego na szesnastkowy/heksadecymalny

0

Cześć, mam problem z napisaniem funkcji zamieniającej liczbę z systemu 10 na 16. Program kompiluje bez błedów jednak wychodzą dziwne liczby i nie jestem w stanie pojąc gdzie robię błąd
W przykładzie jest wpisana liczba 26 co równa się 1A, a mi wychodzi A1117. kod: https://rextester.com/JFB28305

#include <stdio.h>
#include <stdlib.h>
#define INT_SIZE 32

int dec2hex(int dec, char hex[INT_SIZE]){
    int i=0;
    while(dec > 0)
    {
        hex[i]=dec%16;
        switch(hex[i])
        {
        case 10:
            hex[i]="A";
            break;
        case 11:
            hex[i]="B";
            break;
        case 12:
            hex[i]="C";
            break;
        case 13:
            hex[i]="D";
            break;
        case 14:
            hex[i]="E";
            break;
        case 15:
            hex[i]="F";
            break;
        default:
            break;
        }
    dec /= 16;
    i++;
    }
    return i;
}
int main()
{
    int j,dec=26;
    char hex[INT_SIZE];
    int i = dec2hex(dec,hex);
    for(j=i-1;j>=0;j--);
    {
    printf("%d\n\n",hex[j]);
    }
return 0;
}
2

Nie zakańczasz nigdy tekstu zerem. Najprostsza poprawa:

char text[20] = {0};
2

to nie jest dec2hex ale po prostu intToHex.
printf daje gotowe rozwiązanie wystarczy użyć %x.

I jeszcze wyświetlasz liczbę w odwróconej kolejności (małą endianą, a oczekujesz dużej).

3

Zamiast (zamiast? Czy to w ogóle ma sens?) switch - case, tablica jako stos:

    int a=0, base = 16;
    printf("Int to converse (up to 65535): \n");
    scanf("%d",&a);
    char letters[16]="0123456789ABCDEF";
    int rest;
    int c = 0;
    char b[100];
    do {
        rest = a % base;
        b[c]=rest;
        a=a / base;
        c++;

    }
    while (a!=0);

    for(int i= c-1 ; i >= 0;i--)
        printf("%c", letters[b[i]]);

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0