[C] Coversione da stringa a intero

di il
4 risposte

[C] Coversione da stringa a intero

Ciao io devo convertire una carattere in un intero. So dell'esistenza della funzione atoi, ma io vorrei fare la conversione in maniera diversa. Nel senso che se la stringa è
1010
ma non inteso in base 10 ma per esempio in base 2 (quindi 10)
quindi devo prendere un carattere alla volta e fare:
10=0*2^0+1*2^1+0*2^2+1*2^3

come faccio a farlo?

4 Risposte

  • Re: [C] Coversione da stringa a intero

    Ciao,

    Non è complicato... parti dall'ultima cifra e moltiplica per 2^0, prendi la penultima e moltiplica per 2^1 e così via (in sostanza effettua l'operazione che hai descritto, niente di più).

    Per chiarirti un po'meglio cosa fare, pensa allo pseudocodice seguente:
    int potenza=1;
    for(i=0;i<lunghezza;i++){
       int c=stringa[N-i-1]-'0'; //trasforma l'ascii '0' nel numerico 0
       valore += c*potenza;
       potenza*=2;
    }
    Ciaociao
  • Re: [C] Coversione da stringa a intero

    Ah ecco!
    però
    int potenza=1;
    for(i=0;i<lunghezza;i++){
    int c=stringa[N-i-1]-'0'; //trasforma l'ascii '0' nel numerico 0
    valore += c*potenza;
    potenza*=2;
    }
    ma non si dovrebbe far partire potenza da 0? N cosa indica? non c'è una qualche funzione per l'elevamento che posso usare?
  • Re: [C] Coversione da stringa a intero

    int  c2n(char c){
    	    int n;
              n=0;
    		  n=c-'0';
    	    return n;
    	}
    
    int s2n (char *s){
        int i,v=0,n,p,l;
        l=strlen(s);
        p=1;
        for (i=(l-1); s[i]>='0'  &&  s[i]<='9'; --i){
            n=c2n(s[i]);
            if(n<base){
                v+=n*p; 
                p*=base;
                }
                else
                printf("Base non corretta\n");    
        }
        return v;
    }
    con base già fissata così funziona...
  • Re: [C] Coversione da stringa a intero

    Ciao,

    Come ho detto quello che ho postato è pseudocodice... è facile immaginare che N sia la lunghezza della stringa. "potenza" è l'n-esima potenza del due... la faccio partire da 1 perché 2^0=1 e poi la moltiplico per due a tutti i giri (perché scomodare l'elevamento a potenza quando tanto ad ogni giro devi considerare la potenza successiva? Basta moltiplicare per due - o per la base che stai considerando - quella "attuale").

    In sostanza, ad ogni giro prendo il carattere i-esimo della stringa (parto dal fondo ovviamente perché l'ultima cifra sulla destra sarà quella di peso minore), lo converto in un intero (1 o 0) e lo moltiplico per la potenza del due attuale e lo aggiungo al totale, quindi calcolo la potenza successiva con un *=2...

    Ciaociao
Devi accedere o registrarti per scrivere nel forum
4 risposte