Differenze tra le versioni di "Sapere l'ordine dei byte utilizzato dal sistema per salvare i dati"
(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 | |
− | + | Print "Lettura Little-Endian" | |
− | + | Else | |
− | + | Print "Lettura Big-Endian" | |
− | + | Endif | |
'''End''' | '''End''' | ||
Riga 25: | Riga 24: | ||
Dim p As Pointer | Dim p As Pointer | ||
− | Dim | + | 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 | ||
− | + | 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