- 0 Discussione
-
Conversioni
Indice |
Introduzione
Modifica
Questo piccolo capitolo è dedicato a conversioni particolari delle variabili, dove non basta un semplice cast, ma serve ben altro. Prima o poi sorgerà la domanda: "Come faccio a convertire un int in una stringa e viceversa??"
Questo piccolo capitolo si occupa proprio di questo.
I moduli necessari
Modifica
Sono neccessari due soli moduli:
- std.conv: questo modulo permette le conversioni da un tipo stringa a un tipo numerico (int, float, uint, double...), ma anche una semplice conversione da un tipo numerico ad un altro (da int a double, o in un tipo unsigned...)
- std.string: questo tipo l'avevamo usato nei capitoli precedenti per lavorare con le stringhe, ma possiene una funzione toString(), che permette di convertire un tipo numerico in una stringa, esiste una versione di questa funzione che chiede la radice del numero (ottale, decimale, esadecimale, binaria...ma anche base tre, quattro, sette....)
Da stringa a tipo numerico
Modifica
Conversioni da numeri rappresentati sotto forma di stringa nella loro rappresentazione sotto forma di tipo numerico.
import std.stdio; import std.conv; int main(string[] args) { string strNum = "67"; //Una stringa col valore "67" int num = std.conv.toInt(strNum); //Converto stringa -> numero writefln("%d", num); return 0; }
Output: 67
Da tipo numerico a stringa
Modifica
Un esempio pratico su come convertire un tipo numerico in stringa, col modulo std.string:
Conversioni in base 10
Modifica
import std.stdio; import std.string; int main(string[] args) { int num = 67; //Numero di tipo int = 67 string strNum = std.string.toString(num); //Converto numero -> stringa writefln("%s", strNum); return 0; }
Output: 67
Conversioni in basi diverse da 10
Modifica
E' possibile convertire un numero in una base diversa dal 10, ad esempio in binario, esadecimale, ottale, ma anche altre basi. Ecco un esempio pratico:
import std.stdio; import std.string; int main(string[] args) { long num = 67; //Un tipo long con valore 67. /* CONVERSIONE NUMERO -> RAPPRESENTAZIONE BINARIA * La base deve essere passata come numero intero senza segno * per farlo è sufficiente far seguire la base da una 'u' (unsigned) * il numero da convertire deve essere di tipo long */ //Conversioni in varie basi string binNum = std.string.toString(num, 2u); //BINARIO string hexNum = std.string.toString(num, 16u); //ESADECIMALE string octNum = std.string.toString(num, 8u); //OTTALE string fiveNum = std.string.toString(num, 5u); //BASE 5 writefln("BIN: %s", binNum); writefln("HEX: %s", hexNum); writefln("OCT: %s", octNum); writefln("FIVE: %s", fiveNum); return 0; }
Output: BIN: 1000011 HEX: 43 OCT: 103 FIVE: 232