Differenze tra le versioni di "Convertire un numero da rappresentazione ottale in decimale"

Da Gambas-it.org - Wikipedia.
Riga 46: Riga 46:
 
   
 
   
 
  '''End'''
 
  '''End'''
 +
 +
 +
=Uso della funzione esterna "''strtol( )''" della libreria Libc.so.6=
 +
Si potrà anche fare uso della funzione esterna "''strtol( )''" della libreria ''Libc.so.6'', avendo cura di porre a suo terzo argomento il valore della base "8".
 +
 +
Mostriamo un semplice esempio:
 +
Library "libc:6"
 +
 +
<FONT Color=gray>' ''long int strtol (const char *__restrict __nptr, char **__restrict __endptr, int __base)''
 +
' ''Convert a string to a long integer.''</font>
 +
Private Extern strtoul(__nptr As String, __endptr As Pointer, __base As Integer) As Long
 +
 +
 +
'''Public''' Sub Main()
 +
 
 +
  Dim p As Pointer
 +
  Dim l As Long
 +
 
 +
  l = strtol("444", 0, 8)
 +
 
 +
  Print l
 +
 
 +
'''End'''
 +
 +
 +
 +
=Riferimenti=
 +
* http://man7.org/linux/man-pages/man3/strtol.3.html
 +
* http://www.gnu.org/software/libc/manual/html_node/Parsing-of-Integers.html
 +
* https://www.tutorialspoint.com/c_standard_library/c_function_strtol.htm

Versione delle 16:39, 23 gen 2018

Introduzione generale

Per convertire un numero, espresso in formato a rappresentazione ottale, nella corrispondente rappresentazione decimale, bisogna moltiplicare le cifre del numero ottale per le potenze decrescenti di 8, e successivamente sommare i risultati.

Convertiamo, per esempio il numero ottale 123 nel corrispondente decimale:

(1 * 82) + (2 * 81) + (3 * 80) =

= (1 * 64) + (2 * 8) + (3 * 1) =
 
= 64 + 16 + 3 =

=  83


Uso delle sole risorse di Gambas

Per ottenere la conversione in Gambas potremo utilizzare la funzione " Val( ) ", inserendo nel suo unico parametro la rappresentazione ottale in formato stringa del numero, alla quale viengono anteposti i seguenti caratteri "HO" (oosia la lettera "H" e la lettera "O").

Mostriamo un esempio pratico:

Public Sub Main()
 
 Print Val("&O674")
  
End


Volendo è possibile utilizzare anche un algoritmo come il seguente:

Public Sub Main()  

 Dim a As String  
 Dim b, i, InteroFinale As Integer  
 Dim Esponente, crt As Integer


  a = "674"
   
  For b = Len(a) To 1 Step -1  
  
    crt = Int(Val(Mid(a, b, 1)))  
    i = crt * 8 ^ Esponente  
    Esponente += 1  
    InteroFinale += i  
   
  Next  
 
  Print InteroFinale

End


Uso della funzione esterna "strtol( )" della libreria Libc.so.6

Si potrà anche fare uso della funzione esterna "strtol( )" della libreria Libc.so.6, avendo cura di porre a suo terzo argomento il valore della base "8".

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 strtoul(__nptr As String, __endptr As Pointer, __base As Integer) As Long


Public Sub Main()
 
 Dim p As Pointer
 Dim l As Long
  
  l = strtol("444", 0, 8)
  
  Print l
  
End


Riferimenti