Differenze tra le versioni di "Convertire in un tipo di dati numerico un valore letto in formato Stringa da un file"

Da Gambas-it.org - Wikipedia.
Riga 24: Riga 24:
 
    
 
    
 
  <FONT Color=gray>' ''Qui sfruttiamo l'area di memoria di un vettore di tipo "Byte[]" mediante il suo indirizzo di memoria,
 
  <FONT Color=gray>' ''Qui sfruttiamo l'area di memoria di un vettore di tipo "Byte[]" mediante il suo indirizzo di memoria,
  ' ''restituito dalla proprietà ".Data", per estrarre dalla stringa di dati i soli valori-byte attinenti al numero 10000:''</font>
+
  ' ''restituito dalla proprietà ".Data", nella quale carichiamo i singoli dati del numero dalla stringa:''</font>
 
   bb = Byte[].FromString(s)
 
   bb = Byte[].FromString(s)
 
   Print <FONT Color=#B22222>Int@</font>(bb.Data + 2)
 
   Print <FONT Color=#B22222>Int@</font>(bb.Data + 2)
 
    
 
    
 
  '''End'''
 
  '''End'''

Versione delle 13:00, 8 apr 2018

Il caso in oggetto è quello in cui viene caricato in memoria in formato String (ad esempio mediante il Metodo "File.Load( )"), un file, tra i dati del quale vi sono anche quelli che rappresentano un numero. Lo scopo è quello di estrapolare i byte di dati attinenti a quel numero, di mostrare in console il numero, e di memorizzare quei byte in una variabile del tipo coerente con la quantità di quei medesimi byte che rappresentano il numero.

Per chiarire, poniamo ad esempio che un file contenga i byte costituenti il numero 10000 (diecimila), posti in mezzo ad altri byte di dati; ad esempio così:

01 01 10 27 00 00 02 02 02 02

I 4 byte di dati, colorati in rosso, sono quelli relativi al valore 10000, che sono stati lì memorizzati in ordine little-endian. Essendo 4 i byte, costituenti il numero, si dovrà, dunque, convertire quei byte, caricati come dati stringa, nel tipo Intero (Integer).

Possiamo adottare almeno tre brevi modalità, utilizzando la funzione di dereferenziazione relativa al tipo di dati da ottenere:

Public Sub Main()
 
 Dim s As String
 Dim i As Integer
 Dim bb As Byte[]
 
  s = File.Load("/percorso/del/file")
  
' Qui usiamo la funzione "Mid()" per estrarre dalla stringa di dati i soli valori-byte attinenti al numero 10000:
  i = Int@(Mid(s, 3, 4))
  Print i   
  
' Qui usiamo la funzione "VarPtr()" per gestire la stringa mediante il suo indirizzo di memoria,
' e per estrarre dalla stringa di dati i soli valori-byte attinenti al numero 10000: 
  i = Int@(VarPtr(s) + 2)
  Print i
  
' Qui sfruttiamo l'area di memoria di un vettore di tipo "Byte[]" mediante il suo indirizzo di memoria,
' restituito dalla proprietà ".Data", nella quale carichiamo i singoli dati del numero dalla stringa:
  bb = Byte[].FromString(s)
  Print Int@(bb.Data + 2)
  
End