Visualizzazione dei risultati da 1 a 5 su 5

Discussione: [C] conversione numeri

  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2004
    Messaggi
    185

    [C] conversione numeri

    Ciao

    ho un problema riscontrato durante lo sviluppo di una mia applicazione

    e cioè di convertire un numero da base 10 a base diversa da 10 e viceversa

    il mio obiettivo è di creare un codice più breve possibile.. non mi interessa la performance la pesantezza o la pulizia del codice

    ho trovato la funzione itoa (che non è standard C, ma assolve il compito in modo veloce con una sola istruzione)

    Codice PHP:
    int main() {
       
    char bin[25];
        
    int n;
       
    scanf("%d",&n);
       
    bin=itoa(nbin2);
        return 
    0

    in questo caso converto da decimale a binario
    ma è un attimo convertire a base diversa


    come posso effettuare la conversione da base diversa da 10 a base 10
    non ho capito come funziona atoi..

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,307
    Non vedo come possa esserti utile la funzione atoi che, se non ricordo male, converte una stringa in numero. Può essere che abbia anche una sorta di conversione interna, ma se così è non la conosco a sufficienza.

    Per convertire un numero da base qualunque (minore di 10) a base 10 è sufficiente usare un po' di matematica.

    Prova a vedere questa funzione e cerca di capirne la logica (la funzione non è delle migliori, l'ho scritta al volo):

    codice:
    int converti_base_to_10(int base, int x) {
        int ret = 0;
        int temp = 0;
    
        if (x < base) return x;
        temp = converti_base_to_10(base, x / 10);
        ret = base * temp + (x % 10);
    
        return ret;
    }
    Il primo parametro è la base del numero da convertire, il secondo parametro è il numero da convertire in base 10. Esempio:

    codice:
    // Converte il valore 500 espresso in base 8 nel relativo valore in base 10
    int convertito = converti_base_to_10(8, 500);
    Per basi superiori alla 10 non è possibile usare questa funzione (per ovvie ragioni).


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,307

    Re: [C] conversione numeri

    Originariamente inviato da losker
    il mio obiettivo è di creare un codice più breve possibile.. non mi interessa la performance la pesantezza o la pulizia del codice
    A tal proposito, la funzione di prima la puoi riscrivere così:

    codice:
    int converti_base_to_10(int base, int x) {
        return (x < base) ? x : converti_base_to_10(base, x / 10) * base + (x % 10);
    }
    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2004
    Messaggi
    185
    grazie mille!

    un suggerimento per modificare la tua funzione e fare in modo che sia possibile convertire numeri fino a base 16

    Grazie

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,307
    Originariamente inviato da losker
    grazie mille!

    un suggerimento per modificare la tua funzione e fare in modo che sia possibile convertire numeri fino a base 16

    Grazie
    Dovresti controllare il simbolo che stai "parsando".
    Se è una lettera compresa fra A e F (compresi), consideri il relativo valore decimale (10-15).
    Ovviamente, il tipo accettato come parametro non potrà più essere un intero, ma dovrà, obbligatoriamente, essere una stringa.

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.