Assegnare ciascuna cifra di un numero a un elemento di un vettore di tipo Byte

Da Gambas-it.org - Wikipedia.

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