PDA

View Full Version : [C]Algoritmo per conversione Esadecimale-Decimale, chiarimento :)


cdere
02-11-2008, 15:43
Salve raga,
per l'uni ho fatto questo esercizio:

Scrivere un programma che legga un carattere '0', '1',......'A',....'F' - cifra esadecimale - e stampi il valore decimale corrispondente 0,1-----10,...15

Eccovelo qui:
int main()
{
int index,ascii[100],i;
char alfa;

// inserisco nel vettore dalla posizione 0 alla 9 tutti i codici ascii dei corrispondenti da 0 a 9
i=48;
for(index=0;index<=9; index++) {
ascii[index]=i;
i++; }
// inserisco nel vettore dalla posizione 10 alla 15 tutti i codici ascii delle lettere da A...F
i=65;
for(index=10;index<=15;index++) {
ascii[index]=i;
i++; }
//stampo il corrispondente valore letto in int in char dal vettore
printf("Inserire il valore hex da tradurre in dec: ");
scanf("%d",&alfa);
printf("il valore in dec e' %c",ascii[alfa]);
}


Ora, l'algoritmo funziona ma AL CONTARIO :/ cioè se inserisco per dire 15 mi restituisce F come dovrebbe fare, così per 0->0 10->A 11->B... ma se provo il contrario, cioè sostituisco all'ultimo scanf al posto di %d metto %c e al posto dell'ultimo printf al posto di %c, %d e quindi inserisco i valori in HEX per avere quelli in decimale come mi aspetterei (quindi per dire inserire F->15 e così via) mi restituisce sempre 0!

avete idee in merito? magari l'esposizione non è stata delle migliori :p

bye e grazie comunque ;)

rеpne scasb
02-11-2008, 16:23

cdere
02-11-2008, 20:59
per la miseria si :D :D

ma come hai fatto? io non ci sarei MAI arrivato a questo:

printf("il valore in dec e' %d\n",alfa>'9'?(alfa&0xDF)-'A'+10:alfa-'0');

cioè &0xDF :asd: :D :D ???

puoi spiegarmi un po tutta l'istruzione?

bye e ancora grazie mille, un grande ^^

malocchio
02-11-2008, 21:37
Mi era venuto in mente prima.. scanf dovrebbe avere un funzionamento simile al printf. Non so se sto dicendo una minchiata...

int hex;
scanf("%x",&hex);
printf("il valore dec è %d\n",hex);


Ho provato, funziona! Sempre che la stringa in hex la prendi in input, perché la conversione viene fatta da scanf() !!!

rеpne scasb
02-11-2008, 21:44

malocchio
02-11-2008, 22:37
#include <stdio.h>

int main(void)

{
char alfa;

/* Acquisisce il carattere alfa, se e' > '9' allora alfa e' compresto tra 'a' e

CODE-CUT */

printf("Inserire il valore hex da tradurre in dec: ");
scanf("%c",&alfa);
printf("il valore in dec e' %d\n",alfa>'9'?(alfa&0xDF)-'A'+10:alfa-'0');

return 0;
}

Scritto in Assembler sarebbe veramente efficiente :D :D