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

Da Gambas-it.org - Wikipedia.
Riga 54: Riga 54:
  
  
<FONT color=#B22222><B>5 - </b></font>Se invece dobbiamo estrarre il valore decimale da un esadecimale, restituito da un comando bash gestito con ''Process'', e rappresentato dal valore "0x....", allora possiamo fare così:
+
<FONT color=#B22222><B>5 - </b></font>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'''
 +
 
 +
 
 +
 
 +
<FONT color=#B22222><B>6 - </b></font>Se invece dobbiamo estrarre il valore decimale da un esadecimale, restituito da un comando bash gestito con ''Process'', e rappresentato dal valore "0x....", allora possiamo fare così:
 
  '''Public''' Sub Button1_Click()
 
  '''Public''' Sub Button1_Click()
 
   
 
   
Riga 77: Riga 90:
  
  
<FONT color=#B22222><B>6 - </b></font>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'':
+
<FONT color=#B22222><B>7 - </b></font>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()
 
  '''Public''' Sub Main()
 
   
 
   
Riga 93: Riga 106:
  
  
<FONT color=#B22222><B>7 - </b></font>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'':
+
<FONT color=#B22222><B>8 - </b></font>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()
 
  '''Public''' Sub Main()
 
   
 
   

Versione delle 10:32, 26 gen 2014

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 la funzione di conversione Val() secondo la seguente sintassi:

decimale = VAL("stringa_esadecimale")

Esempio:

Public Sub Button1_Click()

 Dim intIntero as integer

  intIntero = Val("&h4B56")   |1|

  Print intIntero

End


2 - Se il valore da convertire in decimale deve essere 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, nella quale c'è il puro valore esadecimale, possiamo fare così:

Public Sub Button1_Click()

 Dim ss As String = "07A120"
 Dim intIntero As Integer
 
   ss = "&" & ss

  intIntero = Val(ss)

  Print intIntero

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 estrarre il valore decimale da un esadecimale, restituito da un comando bash gestito con Process, e rappresentato dal valore "0x....", allora possiamo fare così:

Public Sub Button1_Click()

 Dim pr As Process
 Dim s1, s2 As String

  pr = Shell "linea_di_comando_bash" For Read
  
  While Not Eof(pr)
    Input #pr, s1
    If Left(s1, 2) = "0x" Then Exit
  Wend

' Prendiamo della stringa i caratteri dopo la “x”, ossia soltanti quelli che rappresentano strettamente il numero esadecimale:
   s2 = Right(s1, Len(s1) - 2)

' Mostriamo sia il valore esadecimale (ma senza la "x") sia quello decimale:
   Print s2, 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



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 anche con il solo prefisso "&", per esempio: &2013.