Differenze tra le versioni di "Assegnare ciascuna cifra di un numero a un elemento di un vettore di tipo Byte"

Da Gambas-it.org - Wikipedia.
 
Riga 43: Riga 43:
 
   
 
   
 
   
 
   
  PublicSub Main()
+
  Public Sub Main()
 
    
 
    
 
   Dim bb As New Byte[4]
 
   Dim bb As New Byte[4]

Versione attuale delle 04:36, 10 giu 2024

Il caso è quello in cui si intende assegnare ciascuna cifra, da cui è composto un numero, a un elemento di una variabile vettoriale di tipo Byte[ ].

Così ad esempio, se il numero è "1234" e la variabile vettoriale è vett[4], vorremo assegnare:

  • la cifra "1" del numero al primo elemento del vettore vett[0];
  • la cifra "2" del numero al primo elemento del vettore vett[1];
  • la cifra "3" del numero al primo elemento del vettore vett[2];
  • la cifra "4" del numero al primo elemento del vettore vett[3].


Proponiamo due modalità: una usando le sole risorse di Gambas, l'altra la funzione esterna sprintf( ) della libreria C.

Uso delle sole risorse di Gambas

In questo caso potremo usare un codice simile al seguente:

Public Sub Main()
 
 Dim bb As New Byte[4]
 Dim b As Byte
 Dim i As Integer
  
 i = 1234
  
 bb = Byte[].FromString(CStr(i))
  
 For b = 0 To bb.Max
' Poiché in ogni elemento del vettore sono stati salvati i codici ASCII dei simboli numerici, per ottenere i numeri delle cifre, che componevano il numero intero, dobbiamo sottrarre a ciascun codice ASCII il valore "48":
   bb[b] = bb[b] - 48
 Next
  
' Verifichiamo il risultato:
 For Each b In bb
   Print b
 Next
  
End

Uso della funzione esterna "sprintf()" della libreria C

In quast'altro caso potremo usare un codice simile al seguente:

Library "libc:6"

' int sprintf (char *__restrict __s, const char *__restrict __format, ...)
' Write formatted output to S.
Private Extern sprintf(__s As Pointer, __formats As String, n As Integer) As Integer


Public Sub Main()
 
 Dim bb As New Byte[4]
 Dim b As Byte
  
 sprintf(bb.Data, "%d", 1234)
  
 For b = 0 To bb.Max
' Poiché in ogni elemento del vettore sono stati salvati i codici ASCII dei simboli numerici, per ottenere i numeri delle cifre, che componevano il numero intero, dobbiamo sottrarre a ciascun codice ASCII il valore "48":
   bb[b] = bb[b] - 48
 Next
  
' Verifichiamo il risultato:
 For Each b In bb
   Print b
 Next
  
End