Differenze tra le versioni di "Convertire un numero da rappresentazione Esadecimale a Decimale"
(34 versioni intermedie di uno stesso utente non sono mostrate) | |||
Riga 1: | Riga 1: | ||
− | Per ottenere la rappresentazione '''''decimale''''' di un valore espresso in | + | 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> | + | <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>[[[#Note|nota 1]]]</sup> | ||
+ | |||
+ | End | ||
− | |||
− | + | <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 Main() | |
− | Dim | + | Dim s As String = "07A120" |
+ | Dim i As Integer | ||
− | + | i = Val("&" & s) | |
− | + | Print i | |
− | |||
− | |||
+ | 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 | |
− | |||
− | + | p = Alloc("03E8") | |
− | + | Print Val("&" & String@(p)) | |
+ | |||
+ | Free(p) | ||
+ | |||
+ | End | ||
− | + | <FONT color=#B22222><B>4 - </b></font>Utilizzando una variabile vettoriale: | |
− | <FONT color=#B22222><B> | + | Public Sub Main() |
− | + | ||
+ | Dim ii As new Integer[] | ||
+ | |||
+ | ii.Push(&123456) | ||
− | + | Print ii[0] | |
− | + | 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>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 | + | |
− | + | Dim s1, s2 As String | |
− | + | s1 = "<FONT color=#B22222>0x</font>0123" | |
− | + | s2 = s1[2, s1.len - 2] | |
+ | Print Val("&" & s2) | ||
− | Print | + | 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 | ||
− | <FONT color=#B22222> | + | =Note= |
− | + | [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'' | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− |
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