Convertire un numero da rappresentazione Esadecimale a Decimale

Da Gambas-it.org - Wikipedia.

Per ottenere la rappresentazione decimale di un valore, espresso in origine in esadecimale, possiamo utilizzare diverse modalità a seconda delle circostanze.

Conversione con la funzione "Dec()"

Si potrà usare la funzione nativa "Dec()", impostando nel primo argomento il numero binario da convertire e nel secondo argomento la base numerica del valore di partenza da convertire (16 = esadecimale).

Dim esa As String = "abcd"

Print Dec(esa, 16)


Se il valore da convertire in decimale deve essere solamente e direttamente mostrato in console

In tal caso possiamo fare semplicemente così:

Public Sub Main()

 Print &4B56   ' [nota 1]

End


Se si deve utilizzare una variabile di tipo stringa, nella quale c'è il puro valore esadecimale in formato stringa

Public Sub Main()

 Dim s As String = "07A120"
 Dim i As Integer

 i = Val("&" & s)

 Print i

End


Se il valore in rappresentazione esadecimale è contenuto in una variabile di tipo Puntatore

Public Sub Main()

 Dim p As Pointer

 p = Alloc("03E8")

 Print Val("&" & String@(p))
 
 Free(p)

End


Utilizzando una variabile vettoriale

Public Sub Main()

 Dim ii As new Integer[]

 ii.Push(&123456)

 Print ii[0]

End


Se il valore esadecimale è espresso come stringa e rappresentato come in C dal valore "0x...."

In questo caso possiamo usare alcune seguenti modalità:

Public Sub Main()
 
 Dim s1, s2 As String
 
 s1 = "0x0123"

 s2 = s1[2, s1.len - 2]
 Print Val("&" & s2)

 s2 = Split(s1, "x")[1]
     
 s2 = Replace(s1, "0x", "&")
 Print Val(s2)
  
 s2 = Replace(s1, "x", "0")
 Print Val("&" & s2)
  
 s2 = Scan(s1, "0x*")[0]
 Print Val("&" & s2)
   
End


Note

[1] Per convenzione il carattere "h" è un prefisso che indica l'esadecimale. Solitamente nei linguaggi BASIC, come Gambas, per indicare la rappresentazione esadecimale si usa il prefisso "&h", esempio: &h2013.
Ad ogni modo, in Gambas la rappresentazione esadecimale di un numero può essere scritta con i prefissi "&h", per esempio: &h2013, oppure anche con il solo carattere "&", per esempio: &2013