Written by Microges2000 Dicembre 06, 2011, 12:14:00 pm22217 ViewsRating: 0 (0 Rates)Print
A volte è utile rappresentare un numero in una base differente dalla decimale, vediamo come fare....
L'appproccio classico è una divisione successiva per il passaggio da decimale ad altra base ed una moltiplicazione successiva per la conversione di un numero espresso in una base nota all decimale.
Facciamo un esempio per la conversione da decimale ad esadecimale
Function Decimale_To_Esadecimale(Valore : Integer) : String; Const Digit : String = '0123456789ABCDEF'; // Questi sono i digit validi Var Resto : Integer; S : String; Begin // ------------------------------------ // Inizializzazione della stringa // ------------------------------------ S := '';
// ------------------------------------ // Ciclo di conversione // ------------------------------------ Repeat // ------------------------------------ // Calcolo resto della divisione // ------------------------------------ Resto := Valore Mod 16;
// ------------------------------------ // Ricalcolo del valore // ------------------------------------ Valore := Valore Div 16;
// ------------------------------------ // Costruzione della stringa // ------------------------------------ S := Copy(Digit, Resto+1) + S; Until (Valore = 0);
Function Esadecimale_To_Decimale(Valore : String) : Integer; Const Digit : String = '0123456789ABCDEF'; // Questi sono i digit validi Var Moltiplicatore : Integer; Risultato : Integer; S : String; Begin // ------------------------------------ // Inizializzzazioni // ------------------------------------ Moltiplicatore := 1; Risultato := 0;
// ------------------------------------ // Ciclo di conversione // ------------------------------------ While (Valore <> '') Do Begin // ------------------------------------ // Prelevamento digit più a destra // ------------------------------------ S := Copy(Valore, Length(Valore), 1);
Come vedere è molto semplice e, con una semplicissima modifica, possiamo creare le funzioni di conversione per una qualsiasi base (in questo esempio da base=1 a base=16)
Function Decimale_To_Base(Valore, Base : Integer) : String; Const Digit : String = '0123456789ABCDEF'; // Questi sono i digit validi Var Resto : Integer; S : String; Begin // ------------------------------------ // Inizializzazione della stringa // ------------------------------------ S := '';
// ------------------------------------ // Ciclo di conversione // ------------------------------------ Repeat // ------------------------------------ // Calcolo resto della divisione // ------------------------------------ Resto := Valore Mod Base;
// ------------------------------------ // Ricalcolo del valore // ------------------------------------ Valore := Valore Div Base;
// ------------------------------------ // Costruzione della stringa // ------------------------------------ S := Copy(Digit, Resto+1) + S; Until (Valore = 0);
Function Base_To_Decimale(Valore : String; Base : Integer) : Integer; Const Digit : String = '0123456789ABCDEF'; // Questi sono i digit validi Var Moltiplicatore : Integer; Risultato : Integer; S : String; Begin // ------------------------------------ // Inizializzzazioni // ------------------------------------ Moltiplicatore := 1; Risultato := 0;
// ------------------------------------ // Ciclo di conversione // ------------------------------------ While (Valore <> '') Do Begin // ------------------------------------ // Prelevamento digit più a destra // ------------------------------------ S := Copy(Valore, Length(Valore), 1);
Per la conversione da/per esadecimale i programmatori Lazarus, FreePascal o Delphi sono avvantaggiati in quanto i compilatori ci offrono tutte le funzioni di cui abbiamo bisogno:
StrToInt('$F') ritorna 16 StrToInt('16') ritorna 16 StrToInt('0F') ritorna un errore in quanto 0F non è un numero decimale valido
About the author
Microges2000 registered at Italian community of Lazarus and Free Pascal on Novembre 29, 2011, 09:04:00 am and has posted 130 posts in the boards since then. Last visit was Gennaio 29, 2021, 09:31:53 am.
Questo blog non rappresenta una testata giornalistica poiché viene
aggiornato senza alcuna periodicità. Non può pertanto considerarsi un
prodotto editoriale ai sensi della legge n. 62/2001.
Questo sito utilizza cookie, anche di terze parti, per offriti servizi in linea con le tue preferenze. Chiudendo questo banner, scorrendo questa pagina, cliccando su un link o proseguendo la navigazione in altra maniera, acconsenti all’uso dei cookie.