Differenze tra le versioni di "Convertire un numero da rappresentazione Esadecimale a Decimale"

Da Gambas-it.org - Wikipedia.
Riga 95: Riga 95:
  
  
<FONT color=#B22222><B>7 - </b></font>Se invece dobbiamo ottenere il valore decimale da un valore esadecimale, espresso come stringa, e rappresentato come in C dal valore "0x....", allora possiamo adottare alcune modalità:
+
<FONT color=#B22222><B>7 - </b></font>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 un paio di funzioni native di Gambas nelle modalità seguenti:
 
  '''Public''' Sub Main()
 
  '''Public''' Sub Main()
 
    
 
    
Riga 102: Riga 102:
 
   s1 = "<FONT color=#B22222>0x</font>0123"
 
   s1 = "<FONT color=#B22222>0x</font>0123"
 
        
 
        
   '''s2 = Replace(s1, "0x", "&")'''
+
   s2 = Replace(s1, "0x", "&")
 
   Print Val(s2)
 
   Print Val(s2)
 
    
 
    

Versione delle 16:55, 7 nov 2021

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 un paio di funzioni native di Gambas nelle modalità seguenti:

Public Sub Main()
 
 Dim s1, s2 As String
 
 s1 = "0x0123"
     
 s2 = Replace(s1, "0x", "&")
 Print Val(s2)
  
 s2 = Replace(s, "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