Convertire un numero da rappresentazione binaria in decimale

Da Gambas-it.org - Wikipedia.

Conversione con la funzione "Dec()"

Si potrà usare la funzione nativa "Dec()", impostando nel primo argomento il numero binario da convertire in rappresentazione decimale e nel secondo argomento la base numerica del valore da convertire (2 = binario).

Dim bin As String = "1111111111111111"

Print Dec(bin, 2)


Conversione con i caratteri &x

Una modalità rapida, per effettuare la conversione dalla rappresentazione binaria in quella decimale, è di anteporre alla rappresentazione binaria i simboli &x, come segue:

Print &x11111110

oppure, avendo la rappresentazione binaria in formato stringa, è di usare la funzione "Val()" e i predetti caratteri &x:

i = Val("&x11111110")

Avendo il valore binario contenuto in una variabile

Dim bin As String = "11111110"

Print Val("&x" & bin)
Dim bin As String = "1111111111111111"

Val("&x" & bin & "&")


Conversione con il carattere %

Un'altra modalità prevede l'uso del carattere %, anteponendolo alla rappresentazione binaria del valore da convertire:

Print %11111110

oppure, avendo la rappresentazione binaria in formato stringa, l'uso della funzione nativa "Val()" anteponendo alla stringa di caratteri della rappresentazione binaria il carattere %:

Print Val("%11111110")

Avendo il valore binario contenuto in una variabile

Dim bin As String = "11111110"

Print Val("%" & bin)
Dim bin As String = "1111111111111111"

Val("%" & bin & "&")


Uso della funzione esterna "strtol()"

La funzione "strtol()", dichiarata nel file header /usr/include/stdlib.h, converte un numero da rappresentazione stringa in un valore di tipo "long int ", come definito nel file header /usr/include/limits.h .

Dunque si passerà a detta funzione esterna una stringa contenente la rappresentazione binaria del valore da convertire, avendo cura di porre il terzo parametro della funzione medesima a 2 (base binaria).

Mostriamo un semplice esempio:

Library "libc:6"

' long int strtol (const char *__restrict __nptr, char **__restrict __endptr, int __base)
' Convert a string to a long integer.
Private Extern strtol(__nptr As String, __endptr As Pointer, __base As Integer) As Long


Public Sub Main()
 
  Dim binario As String
  Dim l As Long
 
' Come esempio passiamo la rappresentazione binaria del valore massimo supportato dal tipo "Long" nativo di Gambas: 9223372036854775807
  binario = "111111111111111111111111111111111111111111111111111111111111111"
      
  l = strtol(binario, 0, 2)
  
  Print l
  
End


Riferimenti