Sapere l'ordine dei byte utilizzato dal sistema per salvare i dati

Da Gambas-it.org - Wikipedia.
Versione del 4 nov 2014 alle 05:33 di Vuott (Discussione | contributi) (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: ...')

(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)

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 sh As Short = 1
 Dim st As Stream
 Dim b As Byte
 
   p = VarPtr(sh)
   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