Convertire un numero da rappresentazione Esadecimale a Decimale

Da Gambas-it.org - Wikipedia.

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


1 - Possiamo in via generale utilizzare una variabile:

Public Sub Button1_Click()

 Dim i as integer

  i = &4B56   |1|

  Print i

End


2 - Se il valore da convertire in decimale deve essere solamente e direttamente mostrato in console, possiamo fare semplicemente così:

Public Sub Button1_Click()

  Print &4B56

End


3 - Se utilizziamo una TextArea possiamo fare così:

Public Sub Button1_Click()

  TextArea1.Text = &4B56

End


4 - Se si deve utilizzare una variabile di tipo stringa, nella quale c'è il puro valore esadecimale in formato stringa, possiamo fare così:

Public Sub Button1_Click()

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

  i = Val(s)

  Print i

End


5 - 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))

End


6 - Se invece dobbiamo ottenere il valore decimale da un valore esadecimale, espresso come stringa, e rappresentato dal valore "0x....", allora possiamo adottare alcune modalità:

Public Sub Main()
 
 Dim s1, s2 As String

  s1 = "0x0123"
 
  s2 = Right(s1, Len(s1) - 2)
  Print Val("&" & s2)
   
  s2 = Replace(s1, "0x", "&")
  Print Val(s2)
   
  s2 = Scan(s1, "0x*")[0]
  Print Val("&" & s2)
   
End


7 - Utilizzando le funzioni di rappresentazione di memoria dei dati e le funzioni che restituiscono il valore che si trova memorizzato all'indirizzo specificato da un Puntatore:

Public Sub Main()

 Dim h, i As Integer
 

  h = &01869F

  i = Int@(MkInt(h))

  Print i

End


8 - Limitatamente a valori di tipo Byte. utilizzando la funzione Chr() e le funzioni che restituiscono il valore che si trova memorizzato all'indirizzo specificato da un Puntatore:

Public Sub Main()

 Dim b1, b2 As Byte
 

  b1 = &A4

  b2 = Byte@(Chr(b1))

  Print b2

End


9 - Utilizzando una variabile vettoriale:

Public Sub Main()

 Dim ii As new Integer[]
 

  ii.Push(&123456)

  Print ii[0]

End


9 - Utilizzando una Funzione appositamente scritta:

Public Sub Main()
 
 Dim num As String
 Dim l As Long
  
  num = "aabbCCDD"
  
  l = Converti(num)
  Print l
  
End


Private Function Converti(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



Note

[1] 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 anche con i prefissi "&h", per esempio: &h2013.