Newsgroup: it.comp.lang.c++
Titolo: Conversione da esa a int (2)

Salve a tutti! Ho bisogno del vostro aiuto: non riesco a capire perché
il programma che ho scritto, si comporta nel modo in cui si comporta
-__-
=== BEGIN PROGRAM ===
// Programma di conversione da hex a ascii
// Versione 0.4
#include <iostream>
using namespace std;
int main() {
    char str[] = "%4d";
    char *p1;
    char risp = 0;
    char conv[] = "0123456789abcdf";
    int first_c = 0, second_c = 0;
    int i,j;
 
    p1 = str;
    for (; *p1; *p1++) {
        if (*p1 != '%') {
               for (j=0; j<16; j++) {
                   if (*p1 == conv[j]) first_c = j;
                   if ((*p1+1) == conv[j]) second_c = j;
               }
        }
    }
 
    risp = first_c*16 + second_c;
    cout << "first_c = " << first_c << endl;
    cout << "second_c = " << second_c << endl;
    cout << risp;
    return 0;
}
=== END PROGRAM ===
Non capisco perché il programma, quando arriva al secondo ciclo for,
punta al terzo elemento dell'array invece che al secondo. Il risultato
del programma dovrebbe essere la lettera "M"...
-- 
You know you're in trouble 
when there is nothing left on the altimeter 
but the maker's name

                    if ((*p1+1) == conv[j]) second_c = j;
Poi e':
if (*(p1+1) == conv[j]) second_c = j;
*p1+1 equivale a (*p1)+1
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

*p1+1 equivale a (*p1)+1
In effetti lo avevo già corretto da solo dopo aver riguardato il
libro, solo che la funzione ancora non torna :((
La funzione così come è adesso salta correttamente il carattere '%',
ma assegna first_c = 13 (invece di 4) e second_c = 15 (invece di 13).
Perchééééé!??!?!??? :*-|


 
La tua funzione è un disastro. :)
Prima di tutto, guarda bene cosa succede nel ciclo 'for': p1 varia
dall'inizio di str fino a quando *p1 è '\0'. Ci sono 3 caratteri, il primo
è il '%'. L'operazione dentro il blocco 'if' viene eseguita 2 volte, non
una. La seconda volta *(p1+1) vale '\0'.
In secondo luogo, convertire in esadecimale usando quel sistema è insensato.
La tabella dei caratteri ASCII ha un ordine che ti permette di determinare
il valore di una cifra esadecimale con un 'if'. Se non avesse tale ordine,
dovresti al limite farti una tabella di conversione, ma non certo iterare
da 0 a 15 per ogni carattere finchè non trovi il valore corrispondente.
Un po' di tempo fa ti ho scritto una funzione che faceva quello che
chiedevi. Non ti piaceva?
Max

Perchééééé!??!?!??? :*-|
Trovato, TROVATOOO!!
L'inghippo sta in un errore logico all'interno del ciclo for! In
pratica gli faccio controllare due volte la terza casella mandando a
monte l'algoritmo, che a questo punto devo ricostruire da capo siigh
:*-)


chiedevi. Non ti piaceva?
L'ho pure stampata, ma è ancora troppo avanzata per il mio livello.
Inoltre volevo fare questa funzione (che è parte di un programma più
grande) per poi ottimizzarla via via che divento più esperto...
infatti se noti sto solo usando cicli moooolto basilari, e sui
puntatori ho sempre un sacco di problemi perché non fanno mai quello
che voglio io ;)
Cmq grazie dell'aiuto: qualche volta le vostre pillole di saggezza
sono veramente importanti epr andare avanti! ^_____^
