Differenze tra le versioni di "Convertire un numero da rappresentazione Esadecimale a Decimale"
Riga 120: | Riga 120: | ||
− | ii. | + | ii.Push(&123456) |
Print ii[0] | Print ii[0] | ||
Riga 126: | Riga 126: | ||
'''End''' | '''End''' | ||
+ | |||
+ | |||
+ | <FONT color=#B22222><B>9 - </b></font>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''' | ||
+ | |||
+ | |||
Versione delle 10:33, 10 mar 2017
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.