So, ich will mir Faulhei nicht nachsagen lassen.....
Hier ist meine Sub die ich programmiert habe (vielleicht etwas umständlich, aber die werde ich später noch vereinfachen).......Funktioniert bei allen 6 Byte Realdatentypen mit der Formatierung: 1. bit Vorzeichen, 39 bit Mantisse und 1 Byte Exponent (bias = 128).....
Der Code steht einfach in einer Form, die ein Label hat (Label1) ein Steuerelementenfeld (Test1) und zwei Buttons....
Private Sub Command1_Click()
Dim Bytes(1 To 6) As Byte
Dim strmerke As String
Dim strzwSP As String
Dim iExpo As Integer
Dim i As Integer
Dim ibere As Single
Dim sbere As Single
Dim sstelle As Integer
Dim zähler As Integer
Dim strgesamt As String
Dim iPotenz As Integer
Dim iSw As String
Dim dbVKomma As Double
Dim dbNKomma As Double
Dim dbErgebnis As Double
'Daten aus TXT Array auslesen....
Bytes(6) = Text1(5).Text
Bytes(5) = Text1(4).Text
Bytes(4) = Text1(3).Text
Bytes(3) = Text1(2).Text
Bytes(2) = Text1(1).Text
Bytes(1) = Text1(0).Text
'Bytes(2) = 0
'Bytes(1) = 0
'Debug.Print BytesTo(Bytes, vbSingle) '4,7
'Debug.Print BytesTo(Bytes, vbDouble)
'Debug.Print BytesTo(Bytes, vbLong)
'Debug.Print BytesTo(Bytes, vbVariant)
'Debug.Print BytesTo(Bytes, vbDecimal)
'Debug.Print BytesTo(Bytes, vbInteger)
strmerke = ""
strgesamt = ""
'zähler = 0
'ASCII-Wert in dualen Wert umrechnen:
For i = 2 To 6
ibere = Bytes(i)
Do Until ibere <= 0.5
'zähler = zähler + 1
If ibere <> 0.5 Then
'strmerke = "1" & strmerke
sbere = ibere / 2
strzwSP = sbere
sstelle = InStr(1, strzwSP, ",")
If sstelle > 0 Then
strmerke = "1" & strmerke
ibere = Mid(strzwSP, 1, sstelle - 1)
Else
strmerke = "0" & strmerke
ibere = sbere
End If
Else
strmerke = "1" & strmerke
End If
Loop
zähler = Len(strmerke)
If zähler < 8 Then
Do
strmerke = "0" & strmerke
zähler = zähler + 1
Loop Until zähler = 8
End If
strgesamt = strmerke & strgesamt
strmerke = ""
Next i
'Duale Zeichenkette in Exponent und Mantisse aufspalten:
'Exponent:
Dim iExp As Integer
Dim strVKomma As String
Dim strNKomma As String
iExp = Bytes(1) - 128
If iExp < 0 Then iExp = 128 - Bytes(1)
'Mantisse (inkl. Vorzeichen):
Dim VZ As Boolean
If Mid(strgesamt, 1, 1) = 0 Then
VZ = True ' +
Else
VZ = False ' -
End If
strgesamt = Mid(strgesamt, 2, 39) 'string ohne VZ
strVKomma = Left(strgesamt, iExp - 1)
zähler = Len(strgesamt)
strNKomma = Right(strgesamt, zähler - iExp + 1)
'Ausrechnen der beiden Teil + zusammensetzten....
strVKomma = "1" & strVKomma 'führende 1 anfügen
zähler = Len(strVKomma)
'Vor Komma...:
iPotenz = 0
For iPotenz = 0 To zähler
iSw = Mid(strVKomma, iPotenz + 1, 1)
If iSw = "1" Then dbVKomma = dbVKomma + (2 ^ (zähler - (iPotenz + 1)))
Next iPotenz
'Nach Komma..:
zähler = Len(strNKomma)
iPotenz = 0
For iPotenz = 0 To zähler
iSw = Mid(strNKomma, iPotenz + 1, 1)
If iSw = "1" Then dbNKomma = dbNKomma + (2 ^ -(iPotenz + 1))
Next iPotenz
'zusammenrechnen der beiden hälften:
dbErgebnis = dbVKomma + dbNKomma
Label1.Caption = dbErgebnis
End Sub
Private Sub Command2_Click()
End
End Sub |