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

Da Gambas-it.org - Wikipedia.
(Nuova pagina: Per ottenere la rappresentazione '''''decimale''''' di un valore espresso in partenza in ''esadecimale'', possiamo utilizzare diverse modalità a seconda delle circostanze. <FONT col...)
 
 
(36 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
Per ottenere la rappresentazione '''''decimale''''' di un valore espresso in partenza in ''esadecimale'', possiamo utilizzare diverse modalità a seconda delle circostanze.
+
Per ottenere la rappresentazione '''''decimale''''' di un valore espresso in origine in ''esadecimale'', possiamo utilizzare diverse modalità a seconda delle circostanze.
  
  
<FONT color=#B22222><B>1 - </b></font>Possiamo in via generale utilizzare la funzione di conversione ''Val()'' secondo la seguente sintassi:
+
<FONT color=#B22222><B>1 - </b></font>Se il valore da convertire in decimale deve essere solamente e direttamente mostrato in console, possiamo fare semplicemente così:
 +
Public Sub Main()
 +
 +
  Print &4B56  <SUP>&#091;[[#Note|nota 1]]&#093;</sup>
 +
 +
End
  
decimale = VAL(stringa_esadecimale)
 
  
Esempio:
+
<FONT color=#B22222><B>2 - </b></font>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()
+
  Public Sub Main()
 
   
 
   
   Dim intIntero as integer
+
   Dim s As String = "07A120"
 +
  Dim i As Integer
 
   
 
   
  intIntero = Val("&h4b56")
+
  i = Val("&" & s)
 
   
 
   
  Print intIntero
+
  Print i
 
   
 
   
  '''End'''
+
  End
 +
 
 +
 
 +
<FONT color=#B22222><B>3 - </b></font>Se il valore in rappresentazione esadecimale è contenuto in una variabile di tipo ''Puntatore'':
 +
Public Sub Main()
 
   
 
   
 
+
  Dim p As Pointer
 
   
 
   
<FONT color=#B22222><B>2 - </b></font>Se il valore da convertire in decimale deve essere mostrato in console, possiamo fare semplicemente così:
+
  p = Alloc("03E8")
'''Public''' Sub Button1_Click()
 
 
   
 
   
  Print &4b56
+
  Print Val("&" & String@(p))
 +
 
 +
  Free(p)
 
   
 
   
  '''End'''
+
  End
  
  
 
+
<FONT color=#B22222><B>4 - </b></font>Utilizzando una variabile vettoriale:
<FONT color=#B22222><B>3 - </b></font>Se utilizziamo una ''TextArea'' possiamo fare così:
+
  Public Sub Main()
  '''Public''' Sub Button1_Click()
+
 +
  Dim ii As new Integer[]
 +
 +
  ii.Push(&123456)
 
   
 
   
  TextArea1.Text = &4b56
+
  Print ii[0]
 
   
 
   
  '''End'''
+
  End
  
  
 +
<FONT color=#B22222><B>5 - </b></font>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
  
<FONT color=#B22222><B>4 - </b></font>Se si deve utilizzare una variabile, nella quale c'è il puro valore esadecimale; possiamo fare così:
 
  
  '''Public''' Sub Button1_Click()
+
<FONT color=#B22222><B>6 - </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 alcune seguenti modalità:
+
  Public Sub Main()
   Dim ss As String = "07A120"
+
 
  Dim intIntero As Integer
+
   Dim s1, s2 As String
 
    
 
    
    ss = "&" & ss
+
  s1 = "<FONT color=#B22222>0x</font>0123"
 
   
 
   
  intIntero = Val(ss)
+
  s2 = s1[2, s1.len - 2]
 +
  Print Val("&" & s2)
 
   
 
   
   Print intIntero
+
  s2 = Split(s1, "x")[1]
+
     
  '''End'''
+
  s2 = Replace(s1, "0x", "&")
 +
  Print Val(s2)
 +
    
 +
  s2 = Replace(s1, "x", "0")
 +
  Print Val("&" & s2)
 +
 
 +
  s2 = Scan(s1, "0x*")[0]
 +
  Print Val("&" & s2)
 +
   
 +
  End
  
  
  
<FONT color=#B22222><B>5 - </b></font>Se invece dobbiamo estrarre il valore decimale da un esadecimale restituito da un comando bash, o comunque rappresentato dal valore "0x....", allora possiamo fare così:
+
=Note=
'''Public''' Sub Button1_Click()
+
[1] Per convenzione il carattere "<FONT color=#B22222>h</font>" è un prefisso che indica l'esadecimale. Solitamente nei linguaggi BASIC, come Gambas, per indicare la rappresentazione esadecimale si usa il prefisso "<FONT color=#B22222>'''&h'''</font>", esempio: ''&h2013''.
+
<BR>Ad ogni modo, in Gambas la rappresentazione esadecimale di un numero può essere scritta con i prefissi "<FONT color=#B22222>'''&h'''</font>", per esempio: ''&h2013'', oppure anche con il solo carattere "<FONT color=#B22222>'''&'''</font>", per esempio: ''&2013''
  Dim pr As Process
 
  Dim ss As New String[]
 
  Dim s As String
 
 
  pr = Shell "''linea_di_comando_bash''" For Read
 
 
 
  While Not Eof(pr)
 
    Input #pr, s
 
    If Mid(s, 1, 2) = "0x" Then Exit
 
  Wend
 
 
<FONT color=#006400>' ''Dividiamo la stringa in modo tale da ottenere la seconda parte priva della “x”:''</font>
 
    ss = Split(s, "x")
 
 
<FONT color=#006400>' ''Mostriamo sia il valore esadecimale (senza la "x") che quello decimale:''</font>
 
    Print ss[1], Val("&" & ss[1])
 
 
'''End'''
 

Versione attuale delle 16:24, 27 set 2023

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


3 - 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


4 - Utilizzando una variabile vettoriale:

Public Sub Main()

 Dim ii As new Integer[]

 ii.Push(&123456)

 Print ii[0]

End


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


6 - 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 = 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