Ciao come prima cosa si può iniziare a lavorare sull'algoritmo per la conversione da base 10 a base 16. Si può utilizzare quello delle divisioni successive... cioè dividi il numero decimale per 16 salvandoti il resto. Il risultato approssimato si divide di nuovo per 16 salvandosi sempre il resto ecc.. si continua cosi fino a quando non si arriva ad un numero minore di 16. Poi i resti ottenuti dalle varie divisioni sono il risultato, presi xò dall'ultimo al primo.
Il codice per la prima funzione dunque viene:
void dec2hex(unsigned short input, char hexstring[4])
{
int resto[10];
int ris, i, in, y,c;
char *p;
i = 0;
in = input;
while (in >= 16)
{
resto[i] = in % 16;
ris = in /16;
in = ris;
i++;
}
resto[i]=in;
y = i;
for(c = 0; c<=4; c++, y--)
{
switch (resto[y])
{
case 10:
hexstring[c]='A';
case 11:
hexstring[c]='B';
case 12:
hexstring[c]='C';
case 13:
hexstring[c]='D';
case 14:
hexstring[c]='E';
case 15:
hexstring[c]='F';
default:
p = &hexstring[c];
itoa(resto[y],p,10);
/*oppure
sprintf(p,"%s",resto[y]);
*/
}
}
}
Cosi dovrebbe funzionare.
Ciao.