Convertire un numero da rappresentazione Decimale a Esadecimale
Per convertire un numero decimale in rappresentazione esadecimale (quindi da base 10 a base 16), si potranno utilizzare diverse modalità.
Indice
Uso della funzione "Hex()"
La funzione "Hex()" restituisce, come stringa, la rappresentazione esadecimale di un numero decimale.
Esempio:
Public Sub Main() Dim esad As String esad = Hex(100000, 6) Print esa End
Uso della funzione "Base()"
La funzione "Base()" restituisce la rappresentazione stringa di un numero in base definita nel 2° parametro, il quale deve essere un numero compreso fra 2 e 36.
In questo caso il numero, che esprime la base, sarà 16 (esadecimale).
Così, se vogliamo ottenere la rappresentazione stringa in esadecimale di un numero espresso in rappresentazione decimale:
Public Sub Main() Dim esad As String esad = Base(100000, 16) Print esad End
Uso del Puntatore
Per l'uso della variabile di tipo Puntatore bisognerà assegnare a questa il valore decimale, e successivamente convertire il valore Puntatore in Stringa mediante la funzione di conversione CStr():
Public Sub Main() Dim p As Pointer Dim s As String p = 10000 s = CStr(p) Print s End
in console avremo il seguente risultato: 2710
Ovviamente si potrà utilizzare anche una variabile di tipo Intero per assegnare il valore, da convertire, al Puntatore.
Se viene utilizzata una variabile di tipo diverso dall'Intero, bisognerà assegnarla alla variabile "Puntatore" convertendola sempre in "Intero":
Public Sub Main() Dim p As Pointer Dim sh As Short = 1000 Dim b As Byte = 99 p = CInt(sh) Print CStr(p) p = CInt(b) Print CStr(p) End
Uso di un algoritmo
Volendo, si potrà anche scrivere un apposito codice per ottenere la rappresentazione esadecimale di un numero decimale, come ad esempio quello che segue:
Public Sub Main() Dim n As Integer = 123456789 Dim ss As New String[] Dim simboli_esadec As String[] = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"] Dim s, ex As String While n > 0 ss.Push(simboli_esadec[n Mod 16]) n \= 16 Wend ss.Reverse For Each s In ss ex &= s Next Print ex End
Uso della funzione esterna "sprintf()"
La funzione "sprintf()" della libreria dinamica condivisa esterna "libc.so.6 " scrive in un'array di caratteri terminanti con il valore \0 Null (quindi in una stringa) un dato formattato nella modalità indicata nel 2° parametro.
Per ottenere la formattazione di un valore numerico in rappresentazione esadecimale (base 16), sarà sufficiente indicare nel secondo parametro della funzione esterna "sprintf()" la seguente stringa: "%.8X ".
Mostriamo un esempio pratico:
Library "libc:6" ' int sprintf (char *__restrict __s, const char *__restrict __format, ...) ' Write formatted output to S. Private Extern sprintf(__ As Pointer, __format As String, i As Integer) As Integer Public Sub Main() Dim esad As Pointer ' E' necessario passare alla funzione esterna "sprintf()" un'area di memoria allocata, nella quale essa potrà scrivere il risultato: esad = Alloc(SizeOf(gb.Byte), 8) sprintf(esad, "%.8X", 12345) ' Dereferenzia il Puntatore, per ottenere il risultato fornito dalla funzione esterna "sprintf()": Print String@(esad) ' Libera la memoria precedentemente allocata e si assicura che il Puntatore non punti ad una cella di memoria rilevante: Free(esad) esad = 0 End