Categories
ECMAscript

Esadecimali e decimali: è semplicissimo

Mi sorprende leggere in giro che molte persone utilizzano complicate funzioni per convertire i numeri dal formato decimale al formato esadecimale e viceversa.

Un numero è sempre solamente un numero, non ha importanza come lo si scrive: il decimale 10 vale dieci, l’esadecimale A vale dieci. Qualunque linguaggio di scripting è in grado di convertire i numeri da un formato all’altro con semplicità, e ActionScript non è da meno.

In ActionScript, anche nelle versioni precedenti ad AS3, possiamo utilizzare sia valori decimali che esadecimali per rappresentare un numero intero, non c’è nessuna differenza in termini di prestazioni.

I numeri decimali si scrivono utilizzando le cifre da 0 (zero) a 9 (nove).

I numeri esadecimali sono sempre preceduti dal prefisso 0x (zero ics) e si scrivono utilizzando i simboli da 0 (zero) a F (effe), non c’è distinzione tra maiuscole e minuscole.

Per verificare che non esiste nessuna differenza tra le due forme vediamo un esempio pratico (il codice è uguale per qualunque versione di ActionScript e di Flash Player):

var decimale = 10;
var esadecimale = 0xA;

trace(decimale == esadecimale);     /// output: true
trace(decimale === esadecimale);    /// output: true

Dall’esempio si capisce bene che le due variabili, dichiarate utilizzando due forme diverse, non soltanto sono equivalenti (==), sono addirittura identiche (===).

Visto che non esiste nessuna differenza tra una forma e l’altra, è facile capire che ActionScript non avrà nessuna difficoltà a visualizzare i numeri in un modo o nel’altro, basta chiederglielo con gentilezza.

Visualizzare un numero in formato esadecimale

Come convertire velocemente un valore numerico in una stringa esadecimale equivalente? Ovviamente utilizzando il Metodo toString!

Ecco un esempio:

var numero = 16777215;
var stringaesadecimale = numero.toString(16);

trace(stringaesadecimale); /// output: ffffff

Fine. Non c’è davvero bisogno di fare altro.

A quanto pare non tutti sanno che il Metodo toString applicato alle variabili di tipo numerico (Number, int, uint, eccetera) accetta come parametro la base numerica, quindi è facile convertire un numero decimale nella sua forma esadecimale, ma anche ottale, binario, o qualunque altro formato che ci serva (compreso tra 2 e 36):

var numero = 2754;

/// Binario
trace(numero.toString(2)); /// output: 101011000010

/// A base 4
trace(numero.toString(4)); /// output: 223002

/// Ottale
trace(numero.toString(8)); /// output: 5302

/// Decimale
trace(numero.toString(10)); /// output: 2754

/// Esadecimale
trace(numero.toString(16)); /// ac2

/// A base 36
trace(numero.toString(36)); /// output: 24i

Il funzionamento del Metodo toString per i numeri è uno standard ECMAscript, quindi possiamo utilizzarlo allo stesso modo qualunque sia la versione di ActionScript che stiamo utilizzando, e anche con linguaggi diversi da ActionScript, purché rispettino questo standard (il più diffuso è JavaScript).

Convertire una stringa esadecimale in un valore numerico

Il procedimento inverso, ovvero convertire una stringa che rappresenta un valore esadecimale in un numero è altrettanto semplice, ecco qui il codice:

var stringaesadecimale = '006699';
var numero = parseInt(stringaesadecimale, 16);

trace(numero); /// output: 26265

La Funzione parseInt valuta il contenuto di una Stringa e prova a convertirlo in un valore numerico. Se la conversione non è possibile il risultato sarà NaN (Not a Number), altrimenti otterremo il valore numerico corrispondente.

Questa funzione accetta due parametri: il primo è la stringa da valutare, il secondo è la base numerica, quindi è sufficiente indicare la base giusta per convertire stringhe che rappresentano valori esadecimali, ottali, eccetera.

Anche questa Funzione fa parte delle specifiche ECMAscript e può essere usata allo stesso modo in ActionScript, in JavaScript e ovunque sia supportato questo standard.

Spero che questo articolo aiuti l’estinzione di tutte le inutili funzioni di conversione che mi capita di vedere in giro, spesso i Manuali tralasciano questo genere di cose, che sono considerate superflue da chi li scrive, ma basta farsi un giro su qualche Forum per scoprire che non sono poi così ovvie per tutti.

Tu cosa ne pensi? Ho perso il mio tempo a scrivere l’ovvio oppure ho risposto ad un tuo dubbio? Fammelo sapere con un commento qui sotto!

Loading spinner

Leave a Reply

Your email address will not be published. Required fields are marked *