Hallo Leute.
Ich würde eine Funktion benötigen, die unsigned Doppelinteger-Zahlen in Float-Zahlen umwandelt.
Z.B.: Aus 1158208580 sollte 2189.767 werden.
Hab dazu folgende Codes gefunden, aber leider nicht in Autoit
Spoiler anzeigen
VB:
Code
Option Explicit
' use API call to copy memory blocks
' size of blocks is specified as number of bytes
' both DINT (or INT32) and FLOAT (or REAL32) are 32-bit or 4-byte long
Private Declare Sub MoveMemory _
Lib "KERNEL32" _
Alias "RtlMoveMemory" _
(ByVal Dest As Any, _
ByVal Source As Any, _
ByVal Bytes As Long)
' Convert DINT (INT32) to a FLOAT (REAL32)
Public Function Dint2Real(myDint As Long) As Single
Call MoveMemory(VarPtr(Dint2Real), VarPtr(myDint), 4)
End Function
' Convert FLOAT (REAL32) to a DINT (INT32)
Public Function Real2Dint(myReal As Single) As Long
Call MoveMemory(VarPtr(Real2Dint), VarPtr(myReal), 4)
End Function
Alles anzeigen
Python
Code
def dint2real(a,s,scale=0):
if (scale == 0):
a.write("ISCALE?")
scale=double(a.read(17).split()[0])
n=array(map(ord,s))
n=n.reshape(len(n)/4,4)
return scale*( (( -(n[:,0]&128) + (n[:,0]&127) )*256 + n[:,1])*2**16
+ ( ( -(n[:,2]&128) + (n[:,2]&127) )*256 + n[:,3]) + (n[:,
2]&128)*512 )
def sint2real(a,s,scale=0):
if (scale == 0):
a.write("ISCALE?")
scale=double(a.read(17).split()[0])
n=array(map(ord,s))
n=n.reshape(len(n)/2,2)
return scale*( ( -(n[:,0]&128) + (n[:,0]&127) )*256 + n[:,1])
Alles anzeigen
Wäre um jede Hilfe dankbar.
EDIT: Hat sich erledigt, hab gerade die Funktion ' _WinAPI_IntToFloat' gefunden
Trotzdem danke