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.
(Creata pagina con "Il caso in oggetto è quello in cui viene caricato in memoria in formato ''String'', ad esempio mediante il Metodo "''File.Load( )''", i dati contenuti in un file, tra i quali...")
 
Riga 1: Riga 1:
Il caso in oggetto è quello in cui viene caricato in memoria in formato ''String'', ad esempio mediante il Metodo "''File.Load( )''", i dati contenuti in un file, tra i quali vi sono quelli attinenti a un numero. Lo scopo è quello di estrapolare i byte di dati attinenti a quel numero che ci interessa e di convertire in un tipo di dati coerente quei medesimi byte di dati.
+
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 attinenti a un numero. Lo scopo è quello di estrapolare i byte di dati attinenti a quel numero che ci interessa e di convertirli e memorizzarli in una variabile di un tipo di dati coerente quei medesimi byte di dati.
  
 
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ì:
 
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ì:

Versione delle 12:30, 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 attinenti a un numero. Lo scopo è quello di estrapolare i byte di dati attinenti a quel numero che ci interessa e di convertirli e memorizzarli in una variabile di un tipo di dati coerente quei medesimi byte di dati.

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ì:

01011027000002020202

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 per entrambe la funzione di dereferenziazione relativa al tipo di dati da ottenere.

Facciamo un esempio pratico, utilizzando il caso esplicativo sopra esposto:

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 usiamo sfruttiamo l'area di memoria di un vettore di tipo "Byte[]" mediante il suo indirizzo di memoria
' restituito dalla proprietà ".Data", e per estrarre dalla stringa di dati i soli valori-byte attinenti al numero 10000:
  bb = Byte[].FromString(s)
  Print Int@(bb.Data + 2)
  
End