Differenze tra le versioni di "Sapere l'ordine dei byte utilizzato dal sistema per salvare i dati"
(4 versioni intermedie di uno stesso utente non sono mostrate) | |||
Riga 2: | Riga 2: | ||
===Uso della proprietà ''System.ByteOrder''=== | ===Uso della proprietà ''System.ByteOrder''=== | ||
− | Gambas mette a disposizione la specifica | + | Gambas mette a disposizione la specifica Proprietà ".ByteOrder" della Classe ''System'' per conoscere l'[https://it.wikipedia.org/wiki/Ordine_dei_byte ordine dei byte]. |
Esempio: | Esempio: | ||
'''Public''' Sub Main() | '''Public''' Sub Main() | ||
− | If System.ByteOrder == | + | If System.ByteOrder == gb.LittleEndian then |
Print "Lettura Little-Endian" | Print "Lettura Little-Endian" | ||
Else | Else | ||
Riga 16: | Riga 16: | ||
− | ===Usando | + | ===Usando un Puntatore a una variabile di tipo Short=== |
− | Quest'altro modo prevede che si ottenga un ''Puntatore'' da una variabile di tipo ''Short'', che sia stata inizializzata con il valore numerico 1. Va | + | Quest'altro modo prevede che si ottenga un ''Puntatore'' da una variabile di tipo ''Short'', che sia stata inizializzata con il valore numerico '''1'''. |
− | <BR>Si provvederà a dereferenziare il predetto ''Puntatore'' con l'apposita funzione "Byte@()", al fine di leggere soltanto il primo byte-dato del valore numerico "1". | + | <BR>Va ricordato che tale valore di tipo ''Short'' è rappresentato in esadecimale da due byte: ''00 01''. |
+ | <BR>Si provvederà a dereferenziare il predetto ''Puntatore'' con l'apposita funzione "Byte@()", al fine di leggere soltanto il primo byte-dato del valore numerico "1", come immagazzinato in memoria. | ||
<BR>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''. | <BR>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''. | ||
Riga 24: | Riga 25: | ||
'''Public''' Sub Main() | '''Public''' Sub Main() | ||
+ | Dim c As Short = '''1''' | ||
Dim p As Pointer | Dim p As Pointer | ||
− | |||
p = VarPtr(c) | p = VarPtr(c) |
Versione attuale delle 13:58, 21 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 == gb.LittleEndian then Print "Lettura Little-Endian" Else Print "Lettura Big-Endian" Endif End
Usando un Puntatore a una variabile di tipo Short
Quest'altro modo prevede che si ottenga un Puntatore da una variabile di tipo Short, che sia stata inizializzata con il valore numerico 1.
Va ricordato che tale valore di tipo Short è rappresentato in esadecimale da due byte: 00 01.
Si provvederà a dereferenziare il predetto Puntatore con l'apposita funzione "Byte@()", al fine di leggere soltanto il primo byte-dato del valore numerico "1", come immagazzinato in memoria.
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 c As Short = 1 Dim p As Pointer p = VarPtr(c) If Byte@(p) == 1 Then Print "Lettura Little-Endian" Else Print "Lettura Big-Endian" Endif End