Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di HaCk88
    Registrato dal
    May 2005
    Messaggi
    193

    [C++] Decimale -> Esadecimale

    Salve raga,
    mi serve una funzione in c++ che mi converta automaticamente da decimale a esadecimale.
    Grazie

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    423
    Puoi usare le funzioni atoi e itoa della stdlib.
    Ponendo di dover convertire un int in stringa hex, puoi fare:
    codice:
    int i;
    ... //Dai un valore ad i
    char *hex = new char(sizeof(int)*2 + 1);
    itoa(i, hex, 16);
    Se devi convertire una stringa decimale in una esadecimale, puoi fare:
    codice:
    char *dec;
    ... //Dai un valore a dec che rappresenti un numero
    char *hex = new char(sizeof(int)*2 + 1);
    itoa(atoi(dec), hex, 16);

  3. #3
    Utente di HTML.it L'avatar di HaCk88
    Registrato dal
    May 2005
    Messaggi
    193
    Originariamente inviato da pprllo
    Puoi usare le funzioni atoi e itoa della stdlib.
    Ponendo di dover convertire un int in stringa hex, puoi fare:
    codice:
    int i;
    ... //Dai un valore ad i
    char *hex = new char(sizeof(int)*2 + 1);
    itoa(i, hex, 16);
    Se devi convertire una stringa decimale in una esadecimale, puoi fare:
    codice:
    char *dec;
    ... //Dai un valore a dec che rappresenti un numero
    char *hex = new char(sizeof(int)*2 + 1);
    itoa(atoi(dec), hex, 16);
    Non ho capito molto bene :master:
    Non sono molto bravo in c++ infatti questo sarà il mio primo programma.

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    423
    Questo è un codice commentato con vari modi di risolvere il problema. Comunque ti consiglio di iniziare dalle basi e non da programmi più difficili come questo:
    codice:
    #include <stdlib.h> /*Libreria standard del C++, contiene le funzioni "basilari"*/
                        //Questo è un commento, non viene elaborato dal compilatore
                        /*Anche questo è un commento,
                          ma è multilinea*/
    #include <stdio.h>  /*Libreria standard di I/O, contiene le funzioni fondamentali per
                          l'input e l'output di dati da file/tastiera/periferiche*/                  
                        
    int main() /*Punto di ingresso del programma, qui comincia l'esecuzione*/ 
    {
        int Valore; /*Dichiarazione delle variabili. Le variabili si dichiarano 
                      specificando prima il tipo (in questo caso int) e poi il nome
                      della variabile. Come tutta la sintassi C++, i nomi delle variabili
                      sono case-sensitive, ovvero le maiuscole non sono la stessa cosa
                      delle minuscole.*/
                    /*Ricorda sempre che le istruzioni devono essere seguite da ;*/
        
        char StringaDecimale[17]; 
        char StringaEsadecimale[17];
        
                    /*Queste sono 2 dichiarazioni di array. Gli array sono insiemi di dati
                      dello stesso tipo. Per esempio un array di int è un insieme di diversi
                      valori interi, come {1, 2, 4, 6}, per esempio. Gli array si definiscono
                      così: <tipo array> <nome array> [<numero elementi>]. Le stringhe
                      sono considerate come array di singoli caratteri (char).*/
        
        printf("Scrivere un numero decimale: "); 
        
                    /*Funzione standard di output a schermo. Le funzioni si richiamano
                      in questo modo: <NomeFunzione>(<Argomento1>, <Argomento2>, <...>)
                      La funzione printf prende come argomenti una stringa (le stringhe
                      DEVONO essere sempre delimitate da ") e un numero variabile di altri
                      parametri, in base alla stringa.*/
        
        scanf("%d", &Valore);
                    
                    /*Funzione standard di input da tastiera. E' il corrispettivo di printf
                      e anch'essa prende in argomento un numero variabile di argomenti in
                      base alla stringa. Mette quindi nelle variabili argomento i valori
                      che riceve dalla tastiera. Il segno & davanti alla variabile serve a
                      passarla per riferimento. E' un pò complesso come concetto, per ora 
                      ti basti sapere che devi usarla per tutte tranne che per le stringhe.
                      I diversi simboli di scanf/printf servono a leggere/scrivere diversi
                      tipi di dati:
                            %d = tipo di dati int (interi)
                            %c = tipo di dati char (carattere singolo)
                            %f = tipo di dati float o double (virgola mobile)
                            %s = tipo di dati char* o char[] (stringa)
                            %x = tipo di dati int (in formato esadecimale)*/
        
        printf("In esadecimale il numero che hai digitato e': %X\n", Valore); 
                              /*Con la funzione printf scriviamo il numero in esadecimale.
                                La X maiuscola comporta che le lettere del valore esadecimale
                                verranno scritte in maiuscolo. Il carattere '\n' rappresenta
                                un ritorno a capo ed è una cosiddetta sequenza di escape. Le
                                sequenze di due caratteri che iniziano per '\' sono appunto
                                dette sequenze di escape*/
                           
        /*Ma ci sono altri modi per risolvere lo stesso problema, per esempio usando le funzioni
          da me citate*/
          
        printf("Scrivi un altro numero in formato decimale: ");
        
        scanf("%s", StringaDecimale);
                            /*Questa volta, invece di prendere in input un numero, scegliamo
                              di prendere in input una stringa, che conterrà il valore numerico
                              che abbiamo deciso.*/
        
        Valore = atoi(StringaDecimale);
                            /*Questo è un nuovo uso di una funzione: usiamo una funzione per dare
                              un valore ad una variabile. La funzione atoi prende come argomento
                              una stringa e restituisce come risultato il valore intero espresso
                              in quella stringa. Noi prendiamo questo valore e, attraverso l'operatore
                              =, lo assegnamo alla variabile Valore.*/
        
        //A questo punto possiamo seguire 2 strade, te le illustro entrambe
        
        printf("In esadecimale il numero che hai digitato e': %X\n", Valore); 
        
                             /*Scriviamo in valore in esadecimale, proprio come prima*/
                             
        //Ma possiamo ricorrere ad un'altra funzione:
        
        itoa(Valore, StringaEsadecimale, 16);
                             /*Questa funzione è un pò più complessa: ha ben 3 parametri ! La funzione
                               serve per trasformare un intero in una stringa che esprima il valore di
                               quell'intero. Il primo parametro dice alla funzione il valore da convertire.
                               Il secondo dice alla funzione in quale stringa scrivere il valore convertito.
                               Infine il terzo valore dice al programma che base utilizzare per la conversione:
                               base 2, base 3, base 8, base 10, base 16, ecc. ecc.*/
                               
        printf("In esadecimale il numero che hai digitato e': %s\n", StringaEsadecimale);
                             /*A questo punto scriviamo, con printf, la stringa che contiene il valore
                               esadecimale. In questo caso le lettere sono in minuscolo. Vediamo come
                               convertirla in maiuscolo (difficile)*/
        
        int i; //Definiamo una variabile intera per usarla come puntatore
                          
        for (i = 0; i < 17; i++)
        {
            /*Utilizziamo un ciclo for. Il for ha questa sintassi: 
              for(<inizializzazione>; <condizione>; <incremento>)
              Esegue l'operazione contenuta in <inizializzazione>, quindi il blocco di codice contenuto
              tra parentesi graffe viene eseguito finchè <condizione> è valida. Inoltre ad ogni ripetizione
              viene ripetuta l'operazione contenuta in <incremento>. La variabile i viene messa a 0, quindi
              l'operazione contenuta tra graffe viene ripetuta finchè i non diventa maggiore o uguale a 17.
              i viene incrementata ad ogni ciclo con l'istruzione 
              i++
              che è la notazione abbreviata per
              i = i + 1*/
            
            if (StringaEsadecimale[i] >= 'a' && StringaEsadecimale[i] <= 'z')
            {
                /*Qui utilizziamo un if. L'if ha questa sintassi:
                  if(<condizione>)
                  Esegue il codice contenuto all'interno soltanto se <condizione> risulta essere vera.
                  In questo if abbiamo sfruttato la possibilità di usare le stringhe come array di caratteri.
                  Accediamo al singolo carattere con 
                  <stringa>[<indice>]
                  il primo carattere ha indice 0.
                  Se questo carattere risulta essere "maggiore" di 'a' (i caratteri singoli vanno scritti tra
                  apici singoli: ') e "minore" di 'z', noi eseguiamo l'operazione contenuta nell'if. Siccome
                  i cresce ciclo dopo ciclo, noi analizziamo ogni singolo carattere della stringa.*/
                  
                  StringaEsadecimale[i] -= 32;
                  
                /*A questo punto, modifichiamo il valore del carattere che abbiamo trovato essere minuscolo
                  il valore ASCII delle lettere (http://www.lookuptables.com/) maiuscole è uguale al valore
                  delle minuscole meno 32. Con questa operazione 
                  (che equivale a StringaEsadecimale[i] = StringaEsadecimale[i] - 32;) noi trasformiamo quindi
                  le minuscole in maiuscole
                */
            }
        }
        
        printf("In esadecimale il numero che hai digitato e': %s\n", StringaEsadecimale);
                /*Riscriviamo la stringa modificata*/
                                
        system("PAUSE"); /*Questa è una particolare istruzione che permette di eseguire
                           un comando shell da C++, come se lo stessi digitando, appunto,
                           dalla shell. Questo funziona solo sotto DOS/Windows e fa uscire
                           una scritta che dice "Premere un tasto per continuare ..." e
                           attende la pressione di un tasto. Sotto Linux potresti dover
                           usare un altro sistema. Comunque, se hai problemi, puoi lanciare
                           il programma dalla shell affinchè l'output rimanga su schermo.*/
                           
                                
        return 0; /*Il programma si conclude con questa istruzione*/
    }

  5. #5
    Utente di HTML.it L'avatar di HaCk88
    Registrato dal
    May 2005
    Messaggi
    193
    Originariamente inviato da pprllo
    Questo è un codice commentato con vari modi di risolvere il problema. Comunque ti consiglio di iniziare dalle basi e non da programmi più difficili come questo:
    codice:
    #include <stdlib.h> /*Libreria standard del C++, contiene le funzioni "basilari"*/
                        //Questo è un commento, non viene elaborato dal compilatore
                        /*Anche questo è un commento,
                          ma è multilinea*/
    #include <stdio.h>  /*Libreria standard di I/O, contiene le funzioni fondamentali per
                          l'input e l'output di dati da file/tastiera/periferiche*/                  
                        
    int main() /*Punto di ingresso del programma, qui comincia l'esecuzione*/ 
    {
        int Valore; /*Dichiarazione delle variabili. Le variabili si dichiarano 
                      specificando prima il tipo (in questo caso int) e poi il nome
                      della variabile. Come tutta la sintassi C++, i nomi delle variabili
                      sono case-sensitive, ovvero le maiuscole non sono la stessa cosa
                      delle minuscole.*/
                    /*Ricorda sempre che le istruzioni devono essere seguite da ;*/
        
        char StringaDecimale[17]; 
        char StringaEsadecimale[17];
        
                    /*Queste sono 2 dichiarazioni di array. Gli array sono insiemi di dati
                      dello stesso tipo. Per esempio un array di int è un insieme di diversi
                      valori interi, come {1, 2, 4, 6}, per esempio. Gli array si definiscono
                      così: <tipo array> <nome array> [<numero elementi>]. Le stringhe
                      sono considerate come array di singoli caratteri (char).*/
        
        printf("Scrivere un numero decimale: "); 
        
                    /*Funzione standard di output a schermo. Le funzioni si richiamano
                      in questo modo: <NomeFunzione>(<Argomento1>, <Argomento2>, <...>)
                      La funzione printf prende come argomenti una stringa (le stringhe
                      DEVONO essere sempre delimitate da ") e un numero variabile di altri
                      parametri, in base alla stringa.*/
        
        scanf("%d", &Valore);
                    
                    /*Funzione standard di input da tastiera. E' il corrispettivo di printf
                      e anch'essa prende in argomento un numero variabile di argomenti in
                      base alla stringa. Mette quindi nelle variabili argomento i valori
                      che riceve dalla tastiera. Il segno & davanti alla variabile serve a
                      passarla per riferimento. E' un pò complesso come concetto, per ora 
                      ti basti sapere che devi usarla per tutte tranne che per le stringhe.
                      I diversi simboli di scanf/printf servono a leggere/scrivere diversi
                      tipi di dati:
                            %d = tipo di dati int (interi)
                            %c = tipo di dati char (carattere singolo)
                            %f = tipo di dati float o double (virgola mobile)
                            %s = tipo di dati char* o char[] (stringa)
                            %x = tipo di dati int (in formato esadecimale)*/
        
        printf("In esadecimale il numero che hai digitato e': %X\n", Valore); 
                              /*Con la funzione printf scriviamo il numero in esadecimale.
                                La X maiuscola comporta che le lettere del valore esadecimale
                                verranno scritte in maiuscolo. Il carattere '\n' rappresenta
                                un ritorno a capo ed è una cosiddetta sequenza di escape. Le
                                sequenze di due caratteri che iniziano per '\' sono appunto
                                dette sequenze di escape*/
                           
        /*Ma ci sono altri modi per risolvere lo stesso problema, per esempio usando le funzioni
          da me citate*/
          
        printf("Scrivi un altro numero in formato decimale: ");
        
        scanf("%s", StringaDecimale);
                            /*Questa volta, invece di prendere in input un numero, scegliamo
                              di prendere in input una stringa, che conterrà il valore numerico
                              che abbiamo deciso.*/
        
        Valore = atoi(StringaDecimale);
                            /*Questo è un nuovo uso di una funzione: usiamo una funzione per dare
                              un valore ad una variabile. La funzione atoi prende come argomento
                              una stringa e restituisce come risultato il valore intero espresso
                              in quella stringa. Noi prendiamo questo valore e, attraverso l'operatore
                              =, lo assegnamo alla variabile Valore.*/
        
        //A questo punto possiamo seguire 2 strade, te le illustro entrambe
        
        printf("In esadecimale il numero che hai digitato e': %X\n", Valore); 
        
                             /*Scriviamo in valore in esadecimale, proprio come prima*/
                             
        //Ma possiamo ricorrere ad un'altra funzione:
        
        itoa(Valore, StringaEsadecimale, 16);
                             /*Questa funzione è un pò più complessa: ha ben 3 parametri ! La funzione
                               serve per trasformare un intero in una stringa che esprima il valore di
                               quell'intero. Il primo parametro dice alla funzione il valore da convertire.
                               Il secondo dice alla funzione in quale stringa scrivere il valore convertito.
                               Infine il terzo valore dice al programma che base utilizzare per la conversione:
                               base 2, base 3, base 8, base 10, base 16, ecc. ecc.*/
                               
        printf("In esadecimale il numero che hai digitato e': %s\n", StringaEsadecimale);
                             /*A questo punto scriviamo, con printf, la stringa che contiene il valore
                               esadecimale. In questo caso le lettere sono in minuscolo. Vediamo come
                               convertirla in maiuscolo (difficile)*/
        
        int i; //Definiamo una variabile intera per usarla come puntatore
                          
        for (i = 0; i < 17; i++)
        {
            /*Utilizziamo un ciclo for. Il for ha questa sintassi: 
              for(<inizializzazione>; <condizione>; <incremento>)
              Esegue l'operazione contenuta in <inizializzazione>, quindi il blocco di codice contenuto
              tra parentesi graffe viene eseguito finchè <condizione> è valida. Inoltre ad ogni ripetizione
              viene ripetuta l'operazione contenuta in <incremento>. La variabile i viene messa a 0, quindi
              l'operazione contenuta tra graffe viene ripetuta finchè i non diventa maggiore o uguale a 17.
              i viene incrementata ad ogni ciclo con l'istruzione 
              i++
              che è la notazione abbreviata per
              i = i + 1*/
            
            if (StringaEsadecimale[i] >= 'a' && StringaEsadecimale[i] <= 'z')
            {
                /*Qui utilizziamo un if. L'if ha questa sintassi:
                  if(<condizione>)
                  Esegue il codice contenuto all'interno soltanto se <condizione> risulta essere vera.
                  In questo if abbiamo sfruttato la possibilità di usare le stringhe come array di caratteri.
                  Accediamo al singolo carattere con 
                  <stringa>[<indice>]
                  il primo carattere ha indice 0.
                  Se questo carattere risulta essere "maggiore" di 'a' (i caratteri singoli vanno scritti tra
                  apici singoli: ') e "minore" di 'z', noi eseguiamo l'operazione contenuta nell'if. Siccome
                  i cresce ciclo dopo ciclo, noi analizziamo ogni singolo carattere della stringa.*/
                  
                  StringaEsadecimale[i] -= 32;
                  
                /*A questo punto, modifichiamo il valore del carattere che abbiamo trovato essere minuscolo
                  il valore ASCII delle lettere (http://www.lookuptables.com/) maiuscole è uguale al valore
                  delle minuscole meno 32. Con questa operazione 
                  (che equivale a StringaEsadecimale[i] = StringaEsadecimale[i] - 32;) noi trasformiamo quindi
                  le minuscole in maiuscole
                */
            }
        }
        
        printf("In esadecimale il numero che hai digitato e': %s\n", StringaEsadecimale);
                /*Riscriviamo la stringa modificata*/
                                
        system("PAUSE"); /*Questa è una particolare istruzione che permette di eseguire
                           un comando shell da C++, come se lo stessi digitando, appunto,
                           dalla shell. Questo funziona solo sotto DOS/Windows e fa uscire
                           una scritta che dice "Premere un tasto per continuare ..." e
                           attende la pressione di un tasto. Sotto Linux potresti dover
                           usare un altro sistema. Comunque, se hai problemi, puoi lanciare
                           il programma dalla shell affinchè l'output rimanga su schermo.*/
                           
                                
        return 0; /*Il programma si conclude con questa istruzione*/
    }
    Una spiegazione molto esauriente
    Grazie mille!!!!

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    423
    Figurati.

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 © 2025 vBulletin Solutions, Inc. All rights reserved.