Aiuto please!!!!

di il
1 risposte

Aiuto please!!!!

Devo risolvere questo esercizio...
E' richiesto di scrivere 2 funzioni per la conversione da base 10 a base
16 e viceversa.
3) void dec2hex(unsigned short input, char hexstring[4])
Pone nel vettore hexstring la rappresentazione esadecimale del
numero decimale contenuto in input.
La cifra esadecimale meno significativa è hexstring[0].
I valori di input sono interi unsigned a 16 bit.
4) unsigned short hex2dec(char hexstr[4])
Ritorna la rappresentazione decimale del numero esadecimale
rappresentato dal vettore hexstring.
Non si possono quindi utilizzare su questo vettore le
funzioni di manipolazione delle stringhe (strcpy, strcat, ecc.).1) non è consentito l’uso della funzione pow o di altre
funzioni per l’elevamento a potenza.
2) la dichiarazione delle funzioni deve rimanere inalterata
(il prototipo non va cambiato per nessun motivo).
3) la stampa a video del risultato finale deve riportare
la posizione delle cifre seguendo l’ordine MSB … LSB.

1 Risposte

  • Re: Aiuto please!!!!

    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.
Devi accedere o registrarti per scrivere nel forum
1 risposte