Vedere e modificare con i Puntatori un byte costituente il valore di una variabile

Da Gambas-it.org - Wikipedia.

Avendo un Puntatore ad una variabile, è possibile vedere e modificare uno o più byte costituenti il valore contenuto da tale variabile.


Mostriamo un esempio, nel quale si ha una variabile di tipo Intero contenente un valore numerico. Si vedrà un byte costituente tale valore mediante la funzione specifica di dereferenziazione del Puntatore ad una variabile di tipo Intero, e successivamente lo si modificherà mediante i Memory Stream:

Public Sub Main()

 Dim i As Integer
 Dim p As Pointer
 Dim st As Stream

' Abbiamo una variabile di tipo "Intero" con il seguente valore:
 i = &11223344
 Print "Valore originario in esadecimale: "; Hex(i, 4)

' La puntiamo assegnando il suo indirizzo di memoria ad una variabile di tipo "Puntatore":
 p = VarPtr(i)

' Vediamo, per esempio, il secondo byte (hex = 22) costituente il valore contenuto dalla variabile (si tenga presente che l'ordine dei byte dell'area di memoria puntata dal "Puntatore" è "Little-Endian", ossia 44332211, quindi in memoria esso è il 3° dato-byte, indice 2):
 Print Hex(Byte@(p + 2))

' Ora cambiamo quel 3° dato-byte (indice 2) del valore contenuto dalla variabile mediante i "Memory Stream":
 st = Memory p For Write
 Seek #st, 2
 Write #st, &55 As Byte
 st.Close
 
' Vediamo il nuovo secondo byte del valore contenuto dalla variabile:
 Print Hex(Byte@(p + 2))

' Vediamo (con due modalità) il nuovo valore contenuto dalla variabile "i":
 Print Hex(Int@(p)), Hex(i)

End