Convertire un numero da rappresentazione Esadecimale a Decimale
Per ottenere la rappresentazione decimale di un valore espresso in origine in esadecimale, possiamo utilizzare diverse modalità a seconda delle circostanze.
1 - Se il valore da convertire in decimale deve essere solamente e direttamente mostrato in console, possiamo fare semplicemente così:
Public Sub Main() Print &4B56 [Nota 1] End
2 - Analogamente se utilizziamo una TextArea possiamo fare così:
Public Sub Button1_Click() TextArea1.Text = &4B56 End
3 - Se si deve utilizzare una variabile di tipo stringa, nella quale c'è il puro valore esadecimale in formato stringa, possiamo fare così:
Public Sub Main()
Dim s As String = "07A120"
Dim i As Integer
i = Val("&" & s)
Print i
End
4 - Se il valore in rappresentazione esadecimale è contenuto in una variabile di tipo Puntatore:
Public Sub Main()
Dim p As Pointer
p = Alloc("3E8")
Print Val("&" & String@(p))
Free(p)
End
5 - Utilizzando una variabile vettoriale:
Public Sub Main() Dim ii As new Integer[] ii.Push(&123456) Print ii[0] End
6 - Utilizzando una Funzione appositamente scritta:
Public Sub Main()
Dim num As String
Dim l As Long
num = "aabbCCDD"
l = Conversione(num)
Print l
End
Private Function Conversione(ex As String) As Long
Dim ESA As String[] = ["0", "1", "2", "3", "4", "5", "6", "7", "8",
"9", "A", "B", "C", "D", "E", "F"]
Dim c As String
Dim pos, esp, n As Byte
Dim vl As Long
esp = Len(ex) - 1
Repeat
Inc pos
c = Mid(ex, pos, 1)
If IsLetter(c) Then c = UCase(c)
n = ESA.Find(c)
vl += n * (16 ^ esp)
Dec esp
Until pos = Len(ex)
Return vl
End
7 - Se invece dobbiamo ottenere il valore decimale da un valore esadecimale, espresso come stringa, e rappresentato come in C dal valore "0x....", allora 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 = 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