Differenze tra le versioni di "Ottenere un numero dalla sua memorizzazione in formato Little-Endian"

Da Gambas-it.org - Wikipedia.
 
Riga 1: Riga 1:
 
Il caso è quello in cui si intende convertire i dati di un valore, memorizzati in formato ''Little-Endian'' all'interno di un vettore di tipo ''Byte[ ]'', ottenendo così al termine l'effettivo e reale numero corrispondente.
 
Il caso è quello in cui si intende convertire i dati di un valore, memorizzati in formato ''Little-Endian'' all'interno di un vettore di tipo ''Byte[ ]'', ottenendo così al termine l'effettivo e reale numero corrispondente.
 
  
 
Porremo come esempio un vettore di tipo ''Byte[ ]'' di quattro elementi, contenente i seguenti valori: &04, &03, &02 e &01, che rappresentano in formato ''Little-Endian'' il numero decimale: ''16909060''. Per ottenere detto numero, potremo utilizzare alcune modalità:
 
Porremo come esempio un vettore di tipo ''Byte[ ]'' di quattro elementi, contenente i seguenti valori: &04, &03, &02 e &01, che rappresentano in formato ''Little-Endian'' il numero decimale: ''16909060''. Per ottenere detto numero, potremo utilizzare alcune modalità:
Riga 8: Riga 7:
 
   Dim i As Integer
 
   Dim i As Integer
 
    
 
    
  i = Int@(bb.Data)
+
  i = Int@(bb.Data)
 
    
 
    
  Print i
+
  Print i
 
    
 
    
 
  '''End'''
 
  '''End'''
 
 
 
oppure:
 
oppure:
 
  '''Public''' Sub Main()
 
  '''Public''' Sub Main()
Riga 21: Riga 18:
 
   Dim i As Integer
 
   Dim i As Integer
 
    
 
    
  i = bb[0]
+
  i = bb[0]
  i += bb[1] * 256            <FONT Color=gray>' ''&0100''</font>
+
  i += bb[1] * 256            <FONT Color=gray>' ''&0100''</font>
  i += bb[2] * 65536        <FONT Color=gray>' ''&010000''</font>
+
  i += bb[2] * 65536        <FONT Color=gray>' ''&010000''</font>
  i += bb[3] * 16777216  <FONT Color=gray>' ''&01000000''</font>
+
  i += bb[3] * 16777216  <FONT Color=gray>' ''&01000000''</font>
 
    
 
    
  Print i
+
  Print i
 
    
 
    
 
  '''End'''
 
  '''End'''
 
+
o anche:
 
 
 
 
 
  '''Public''' Sub Main()
 
  '''Public''' Sub Main()
 
   
 
   
Riga 37: Riga 32:
 
   Dim i As Integer
 
   Dim i As Integer
 
    
 
    
  i = (bb[0] Or ((bb[1] * CInt(2 ^ 8)))) Or (bb[2] * CInt(2 ^ 16)) Or (bb[3] * CInt(2 ^ 24))
+
  i = (bb[0] Or ((bb[1] * CInt(2 ^ 8)))) Or (bb[2] * CInt(2 ^ 16)) Or (bb[3] * CInt(2 ^ 24))
 
    
 
    
  Print i
+
  Print i
 
    
 
    
 
  '''End'''
 
  '''End'''

Versione attuale delle 15:20, 21 ott 2021

Il caso è quello in cui si intende convertire i dati di un valore, memorizzati in formato Little-Endian all'interno di un vettore di tipo Byte[ ], ottenendo così al termine l'effettivo e reale numero corrispondente.

Porremo come esempio un vettore di tipo Byte[ ] di quattro elementi, contenente i seguenti valori: &04, &03, &02 e &01, che rappresentano in formato Little-Endian il numero decimale: 16909060. Per ottenere detto numero, potremo utilizzare alcune modalità:

Public Sub Main()

 Dim bb As Byte[] = [&04, &03, &02, &01]
 Dim i As Integer
 
 i = Int@(bb.Data)
  
 Print i
  
End

oppure:

Public Sub Main()

 Dim bb As Byte[] = [&04, &03, &02, &01]
 Dim i As Integer
  
 i = bb[0]
 i += bb[1] * 256            ' &0100
 i += bb[2] * 65536        ' &010000
 i += bb[3] * 16777216   ' &01000000
  
 Print i
  
End

o anche:

Public Sub Main()

 Dim bb As Byte[] = [&04, &03, &02, &01]
 Dim i As Integer
  
 i = (bb[0] Or ((bb[1] * CInt(2 ^ 8)))) Or (bb[2] * CInt(2 ^ 16)) Or (bb[3] * CInt(2 ^ 24))
  
 Print i
  
End