Salve raga,![]()
mi serve una funzione in c++ che mi converta automaticamente da decimale a esadecimale.
Grazie![]()
Salve raga,![]()
mi serve una funzione in c++ che mi converta automaticamente da decimale a esadecimale.
Grazie![]()
Puoi usare le funzioni atoi e itoa della stdlib.
Ponendo di dover convertire un int in stringa hex, puoi fare:
Se devi convertire una stringa decimale in una esadecimale, puoi fare:codice:int i; ... //Dai un valore ad i char *hex = new char(sizeof(int)*2 + 1); itoa(i, hex, 16);
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:Originariamente inviato da pprllo
Puoi usare le funzioni atoi e itoa della stdlib.
Ponendo di dover convertire un int in stringa hex, puoi fare:
Se devi convertire una stringa decimale in una esadecimale, puoi fare:codice:int i; ... //Dai un valore ad i char *hex = new char(sizeof(int)*2 + 1); itoa(i, hex, 16);
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 sono molto bravo in c++infatti questo sarà il mio primo programma.
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 esaurienteOriginariamente 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*/ }![]()
Grazie mille!!!!![]()
Figurati.![]()