[VB] Hex in Float konvertieren

08/07/2013 08:41 stotterer09#1
Hallo ich würde gerne einen 4byte hex wert in einen Float konvertieren
Andersherum ist das ganz einfach:
PHP Code:
TextBox2.Text BitConverter.ToString(BitConverter.GetBytes(Convert.ToSingle(TextBox1.Text)))
//Textbox1 ist die Eingabe und Textbox2 die Ausgabe 
Mein code ist bisjetzt so Ich habe das mit der Klasse([Only registered and activated users can see links. Click Here To Register...]so verstanden das ich erst alle hexwerte splitten muss weil da immer ein "-" zwischen den hex teilen ist:
PHP Code:
    Dim test As String()
    
Dim byte1 As String

        test 
Split(TextBox1.Text"-")//Textbox1 ist die Eingabe
        
byte1 test(0) + test(1) + test(2) + test(3)



        
Dim s As Single Convert.ToSingle(byte1
wenn ich das aber ausführe kommt bei
PHP Code:
        Dim s As Single Convert.ToSingle(byte1
"Die Eingabezeichenfolge hat das Falsche Format"

Aber welches andere Format soll ich bitte benutzen?


Dnake für eure Hilfe


Edit: Damit es nicht zur Verwirrung kommt "Single"= "Float"
08/07/2013 08:51 Requi#2
Code:
 Private Function ConvertHexToSingle(ByVal hexValue As String) As Single
        Try
            Dim iInputIndex As Integer = 0
            Dim iOutputIndex As Integer = 0
            Dim bArray(3) As Byte
 
            For iInputIndex = 0 To hexValue.Length - 1 Step 2
                bArray(iOutputIndex) = Byte.Parse(hexValue.Chars(iInputIndex) & hexValue.Chars(iInputIndex + 1), Globalization.NumberStyles.HexNumber)
                iOutputIndex += 1
            Next
 
            Array.Reverse(bArray)
 
            Return BitConverter.ToSingle(bArray, 0)
        Catch ex As Exception
            Throw New FormatException("The supplied hex value is either empty or in an incorrect format. Use the following format: 00000000", ex)
        End Try
 
    End Function
Das hat google ausgespuckt
08/07/2013 08:54 SwarN#3
Ganz ganz wichtig,

Schreib oben 1. Zeile als aller erstes:
Code:
Option Strict On
Für anstehende Projekte würde ich dir empfehle das generell einzuschalten indem du:

Extras -> Options -> Projekte und Projektmappen -> VB-Standard -> Options Strict ON + Option Explicit ON

machst.
08/07/2013 09:43 stotterer09#4
Quote:
Originally Posted by Requi View Post
Code:
 Private Function ConvertHexToSingle(ByVal hexValue As String) As Single
        Try
            Dim iInputIndex As Integer = 0
            Dim iOutputIndex As Integer = 0
            Dim bArray(3) As Byte
 
            For iInputIndex = 0 To hexValue.Length - 1 Step 2
                bArray(iOutputIndex) = Byte.Parse(hexValue.Chars(iInputIndex) & hexValue.Chars(iInputIndex + 1), Globalization.NumberStyles.HexNumber)
                iOutputIndex += 1
            Next
 
            Array.Reverse(bArray)
 
            Return BitConverter.ToSingle(bArray, 0)
        Catch ex As Exception
            Throw New FormatException("The supplied hex value is either empty or in an incorrect format. Use the following format: 00000000", ex)
        End Try
 
    End Function
Das hat google ausgespuckt
ok mit dem Kommt was anderes raus als was ich als input hab
Ich habe erst 1.1212 zu Hex konvertiert dann kam 00-30-2F-46 raus
das habe ich dann mit der von dir gennanten funktion wieder zurück konvertiert und habe dann aber nichtmehr 1.1212 sondern einen Kleineren Wert mit einer viel zulangen Nachkommastelle für Float

Edit: Mir ist aufgefallen wenn ich das was da rauskomme wieder in hex umwanndle und das dann wieder in float das ich dann meinen Anfangswert ohne Komma bekomm aber woran liegt das??
08/07/2013 09:58 Requi#5
Vielleicht ist es ja nicht in 4 Bytes wie du es möchtest.

Mit dem Kram hab ich noch nix zu tun gehabt.
08/07/2013 10:02 stotterer09#6
Quote:
Originally Posted by Requi View Post
Vielleicht ist es ja nicht in 4 Bytes wie du es möchtest.

Mit dem Kram hab ich noch nix zu tun gehabt.
stimmt des könnte sein würd mich aber wundern da ich gedacht hab float sind immer 4bytes groß
08/07/2013 10:18 Requi#7
Schreibs halt so um, dass es 2 mal konvertiert xD
08/07/2013 14:08 kissein#8
Code:
byte[] bytes = new byte[]{ 0x00, 0x30, 0x2F, 0x46 }; 
if (BitConverter.IsLittleEndian) {
    Array.Reverse(bytes); 
}
float myFloat = BitConverter.ToSingle(bytes, 0);
ist ungetestet, sollte aber so funktionieren, muss nur noch in vb übertragen werden ;)
08/08/2013 11:28 stotterer09#9
Quote:
Originally Posted by kissein View Post
Code:
byte[] bytes = new byte[]{ 0x00, 0x30, 0x2F, 0x46 }; 
if (BitConverter.IsLittleEndian) {
    Array.Reverse(bytes); 
}
float myFloat = BitConverter.ToSingle(bytes, 0);
ist ungetestet, sollte aber so funktionieren, muss nur noch in vb übertragen werden ;)
ja funkt ich bin auch n harter vollspast -.- ich hab vergessen das man die hex werte dann von hintenlesen muss(also umgekehrt eingeben um das richtige rauszubekommen -.- ich spast


Der von requi hätt auch funktioniert wenns ned an meiner beschränktheit gescheitert wäre danke euch beiden kann geclosed werden


Edit: wenns jemanden intressiert in vb sieht das dann so aus
Textbox1 ist eingabe textbox2 die ausgabe
PHP Code:
    Dim ByteArray As String()
        
ByteArray Split(TextBox1.Text"-")
        
Dim bytes As Byte() = New Byte() {"&H" ByteArray(3), "&H" ByteArray(2), "&H" ByteArray(1), "&H" ByteArray(0)}


        If 
BitConverter.IsLittleEndian Then
            
Array.Reverse(bytes)
        
End If
        
Dim float As String
        float 
Convert.ToString(BitConverter.ToSingle(bytes0))
        
Dim i As Integer float.Length 4
        Dim Vorkommastelle 
As Integer float.Substring(0i)
        
Dim Nachkommastelle As String float.Substring(ifloat.Length i)
        
MsgBox(Nachkommastelle)
        
TextBox2.Text Vorkommastelle "." Nachkommastelle 
08/08/2013 11:42 Requi#10
Mach dir nichts draus. Mein letzter Fail ist härter.
Und ist auch nicht von mir, sondern von Tante google :
08/08/2013 17:52 'Heaven.#11
Mach mal option strict an...

Nen byte ist kein string ; O
08/08/2013 20:17 stotterer09#12
Quote:
Originally Posted by 'Heaven. View Post
Mach mal option strict an...

Nen byte ist kein string ; O
Ja mach ich an
Ich hab auch bemerkt das man einen String , Indem ein HEX Byte steht nicht in byte konvertieren ich habs jetz eh danke
08/09/2013 17:22 xxfabbelxx#13
closed on request