Differenze tra le versioni di "Sapere l'ordine dei byte utilizzato dal sistema per salvare i dati"

Da Gambas-it.org - Wikipedia.
(Creata pagina con 'Per sapere se il proprio sistema adotta la modalità ''Big-Endian'' o la modalità ''Little-Endian'' per salvare i dati in un file, è possibile utilizzare almeno due modi: ...')
 
Riga 1: Riga 1:
 
Per sapere se il proprio sistema adotta la modalità ''Big-Endian'' o la modalità ''Little-Endian'' per salvare i dati in un file, è possibile utilizzare almeno due modi:
 
Per sapere se il proprio sistema adotta la modalità ''Big-Endian'' o la modalità ''Little-Endian'' per salvare i dati in un file, è possibile utilizzare almeno due modi:
 
  
 
===Uso della proprietà ''System.ByteOrder''===
 
===Uso della proprietà ''System.ByteOrder''===
Riga 8: Riga 7:
 
  '''Public''' Sub Main()
 
  '''Public''' Sub Main()
 
   
 
   
  If System.ByteOrder = 0 then
+
  If System.ByteOrder == 0 then
      Print "Lettura Little-Endian"
+
    Print "Lettura Little-Endian"
  Else
+
  Else
      Print "Lettura Big-Endian"
+
    Print "Lettura Big-Endian"
  Endif
+
  Endif
 
   
 
   
 
  '''End'''
 
  '''End'''
Riga 25: Riga 24:
 
   
 
   
 
   Dim p As Pointer
 
   Dim p As Pointer
   Dim sh As Short = 1
+
   Dim c As Short = 1
 
   Dim st As Stream
 
   Dim st As Stream
 
   Dim b As Byte
 
   Dim b As Byte
 +
 +
  p = VarPtr(c)
 +
  st = Memory p For Read
 +
  Read #st, b
 +
 +
  If b = 1 Then
 +
    Print "Lettura Little-Endian"
 +
  Else
 +
    Print "Lettura Big-Endian"
 +
  Endif
 
    
 
    
    p = VarPtr(sh)
+
   st.Close
    st = Memory p For Read
 
    Read #st, b
 
    
 
    If b = 1 Then
 
      Print "Lettura Little-Endian"
 
    Else
 
      Print "Lettura Big-Endian"
 
    Endif
 
   
 
    st.Close
 
 
   
 
   
 
  '''End'''
 
  '''End'''

Versione delle 15:40, 11 set 2022

Per sapere se il proprio sistema adotta la modalità Big-Endian o la modalità Little-Endian per salvare i dati in un file, è possibile utilizzare almeno due modi:

Uso della proprietà System.ByteOrder

Gambas mette a disposizione la specifica proprietà .ByteOrder della Classe System per conoscere l'ordine dei byte.

Esempio:

Public Sub Main()

 If System.ByteOrder == 0 then
   Print "Lettura Little-Endian"
 Else
   Print "Lettura Big-Endian"
 Endif

End


Leggendo da un flusso di dati

Quest'altro modo prevede che si scriva in un flusso di dati (File o Stream) il valore 1 contenuto in una variabile di tipo Short, e che pertanto in esadecimale è rappresentato da due byte: 00 01. Da detto flusso di dati si leggerà, quindi, il primo byte salvato.
Se il valore restituito è uguale a zero, allora l'ordine dei byte in cui vengono salvati i dati, sarà del tipo Big-Endian; se il valore è uguale a 1 allora l'ordine dei byte sarà di tipo Little-Endian.

Un possibile codice è il seguente:

Public Sub Main()

 Dim p As Pointer
 Dim c As Short = 1
 Dim st As Stream
 Dim b As Byte

 p = VarPtr(c)
 st = Memory p For Read
 Read #st, b

 If b = 1 Then
   Print "Lettura Little-Endian"
 Else
   Print "Lettura Big-Endian"
 Endif
 
 st.Close

End