Okay, hab's jetzt doch mal durchgekaut und meine Vermutung hat sich bestätigt. Im Grunde wandelt er die Fließkommazahl in eine Ganzzahl um und schreibt sie als BigEndian raus. Die Signed-Version schreibt außerdem noch ein zusätzliches Byte davor, was dann angibt, ob die Zahl negativ ist.
Meine Version wäre dann diese hier:
Code: Alles auswählen
; Author: Alex W. (alias Alexi)
; Nicolas G. (alias NicTheQuick)
; http://www.mevedia.de
Procedure.i FileWriteUnsigned(FileID.i, Value.d, Bytes.i)
If (Bytes > 8) ;Wenn mehr als 8 Bytes benutzt werden wollen, brich ab.
ProcedureReturn #False
EndIf
Protected q.q = Abs(Value) ;Wandle Double in Quad um
Protected i.i = Bytes - 1
If (Pow(256., Bytes) < Value) ;Wenn die Zahl nicht durch die gewünschte Anzahl Bytes darstellbar ist, brich ab.
ProcedureReturn #False
EndIf
While (i >= 0) ;Schreibe die Bytes des Quads rückwarts raus. (Big Endian)
WriteByte(FileID, @q + i)
;Debug PeekA(@q + i)
i - 1
Wend
ProcedureReturn #True
EndProcedure
Procedure.i FileWriteSigned(FileID.i, Value.d, Bytes.i)
If (Bytes > 8) ;Wenn mehr als 8 Bytes benutzt werden wollen, brich ab.
ProcedureReturn #False
EndIf
Protected q.q = Abs(Value) ;Wandle Double in Quad um.
Protected i.i = Bytes - 2
If (Pow(256., Bytes - 1) < Value) ;Wenn die Zahl nicht durch die gewünschte Anzahl Bytes darstellbar ist, brich ab.
ProcedureReturn #False
EndIf
WriteByte(File, Bool(Value < 0)) ;Schreibe Vorzeichen von Value raus.
While (i >= 0) ;Schreibe die Bytes des Quads rückwarts raus. (Big Endian)
WriteByte(FileID, @q + i)
;Debug PeekA(@q + i)
i - 1
Wend
ProcedureReturn #True
EndProcedure
Debug FileWriteUnsigned(0, 40000000000., 5)
Debug "---"
Debug FileWriteSigned(0, -40000000000., 6)
Ich habe sie allerdings limitiert auf 8 Bytes maximal, weil das am einfachsten war.