Referenz - PEEK
Syntax: PEEK ([Datentyp,] Adresse)
Typ: Funktion
Kategorie: Pointer
PEEK liest einen Wert direkt vom RAM.
- 'Datentyp' ist der Datentyp des Wertes, der gelesen werden soll; von 'Datentyp' hängt ab, wie viele Bytes gelesen werden. Auch STRINGs und UDTs werden akzeptiert. Die zu lesende Datenmenge richtet sich hier nach der Länge des STRINGs bzw. der Größe des UDTs. Wird 'Datentyp' ausgelassen, nimmt FreeBASIC automatisch UBYTE an.
- 'Adresse' ist ein Pointer auf die Speicherstelle im RAM, von der gelesen werden soll.
- Der Rückgabewert ist eine Referenz auf den Wert, der sich an der Speicherstelle befindet.
Mit PEEK und POKE wurden in älteren BASIC-Dialekten Pointer-Funktionen erstellt.
Beispiel: Wert dreier Variablen aus dem Speicher lesen:
DIM byteVal AS BYTE, shortVal AS SHORT, intVal AS INTEGER
DIM byteAddr AS BYTE PTR, shortAddr AS SHORT PTR, intAddr AS INTEGER PTR
byteAddr = VARPTR(byteVal)
shortAddr = VARPTR(shortVal)
intAddr = VARPTR(intVal)
byteVal = 127
shortVal = 32767
intVal = 2 ^ 31 - 1
PRINT byteVal, shortVal, intVal
PRINT PEEK(BYTE, byteAddr), PEEK(SHORT, shortAddr), PEEK(INTEGER, intAddr)
SLEEP
Diese Form funktioniert einwandfrei. FreeBASIC hat jedoch eigene Pointer-Funktionen, die ein komfortableres Programmieren ermöglichen. Mit den FB-eigenen Funktionen würde dieses Beispiel so aussehen:
DIM byteVal AS BYTE, shortVal AS SHORT, intVal AS INTEGER
DIM bytePtr AS BYTE PTR, shortPtr AS SHORT PTR, intPtr AS INTEGER PTR
bytePtr = @byteVal
shortPtr = @shortVal
intPtr = @intVal
byteVal = 127
shortVal = 32767
intVal = 2 ^ 31 - 1
PRINT byteVal, shortVal, intVal
PRINT *bytePtr, *shortPtr, *intPtr
SLEEP
Die Syntax *Pointer gibt also den Wert zurück, der an der Speicherstelle steht, auf die der Pointer zeigt. Wie viele Bytes gelesen werden, hängt dabei vom Typ des Pointers ab (BYTE PTR, SINGLE PTR, ...)
Unterschiede zu QB:
- Unter QB ist es nicht möglich, den Datentyp des zu lesenden Werts festzulegen; es wird immer ein UBYTE zurückgegeben.
- Unter FreeBASIC gibt PEEK eine Referenz auf den Wert an der angegebenen Speicherstelle zurück.
Unterschiede zu früheren Versionen von FreeBASIC:
- Seit FreeBASIC v0.16 ist der Standard-Rückgabetyp UBYTE; davor war es BYTE.
- Seit FreeBASIC v0.13 ist es möglich, STRINGs und UDTs zu lesen.
Siehe auch:
POKE, VARPTR, SADD, Pointer, Datentypen, Speicher
Zusätzliche Informationen und Funktionen | ||||
---|---|---|---|---|
|