Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Programma C da esadecimale a decimale
Forum - C/C++ - Programma C da esadecimale a decimale

Avatar
Chia (Normal User)
Newbie


Messaggi: 1
Iscritto: 13/07/2011

Segnala al moderatore
Postato alle 10:31
Mercoledì, 13/07/2011
Ciao a tutti, ho letto questo codice da un membro di questo forum però non ho ben capito come funziona, qualcuno può aiutarmi?
Il codice è questo:
# int,bool readHex(char *str){
# //out: converted value, success flag
# int n = 0;
# int t = 0;
# bool success = true;
# while(*str != '\0'){
#     n = n * 16;
#     t = hexVal(*str);
#         if (t == -1){
#             success = false;
#             break;
#         }
#     n = n + t;
#     str++;
# }
# return n, true;
# }


# int hexVal(char ch) {
# if ((ch >= '0') && (ch <= '9')) {
#     return ch - '0';
# } else if ((ch >= 'a') && (ch <= 'f')) {  //ASCII: 'a' = 97 , 'f' = 102
#     return ch - 'a' + 10;
# } else if ((ch >= 'A') && (ch <= 'F'))    {  //ASCII: 'A' = 65 , 'F' = 70
#     return ch - 'A' + 10;
# } else {
#     return -1;
# }
# }

c'è l'equivalente in assembler ma prima vorrei capire proprio il meccanismo per trasformare da esadecimale a decimale, in particolare non capisco la variabile n che viene moltiplicata e sommata a t...
grazie per l'aiuto :)

PM
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6403
Iscritto: 03/01/2010

Up
1
Down
V
Segnala al moderatore
Postato alle 10:37
Mercoledì, 13/07/2011
Tralasciando per un attimo il codice, tu sai come si trasforma un valore esadecimale in decimale, diciamo "con carta e penna"?

Cosa faresti per trasformare in decimale il valore

A2C

?

A(=10)*16^2 + 2*16^1 + C(=12)*16^0 = 2560 + 32 + 12 = 2604 - Chia - 14/07/11 09:33
Ok, quindi t è il valore delle varie cifre (10, 2, 12) e n è il totale che si va accumulando. Il codice non è corretto solo all'inizio (dove c'è int,bool) e alla fine (return n,true). Una funzione restituisce un solo valore. - nessuno - 14/07/11 09:56
Ok, ora ho capito. Ti ringrazio. Tu conosci anche il linguaggio assembler MIPS? - Chia - 14/07/11 10:16
In parte ... ovviamente, apri un altro thread nell'apposito forum (Altri linguaggi, penso ...) - nessuno - 14/07/11 10:48


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Up
0
Down
V
Segnala al moderatore
Postato alle 11:19
Mercoledì, 13/07/2011
http://it.wikipedia.org/wiki/Sistema_numerico_esadecimale

n indica l'ordine di grandezza della cifra (16^k), t il valore numerico della cifra (0 ~ 15).

PM