2016-08-18 1 views
-2

Also ich habe diese Daten hier Ich versuche, mit einem Programm zu bearbeiten.Was ist der Typ dieser 4-Byte-Daten?

Die Daten bestehen aus 2 einzelnen Gleitkommazahlen, dann zwei unbekannten 4-Byte-Datentypen und zuletzt einem 32-Bit-int.

Hier die Daten in hex: 00 00 C8 41 00 00 70 41 00 20 00 00 7D 12 00 00 0A 00 00 00

Nach der Konvertierung sollten sie diese Zahlen sein:

25.0 (float) 
15.0 (float) 
45 (???) 
16 (???) 
10 (int) 

Bitte sagen Sie mir, was mir fehlt, oder wie diese zu konvertieren.

Hinweis: Ich versuche nur die 2 unbekannten 4 Byte Daten zu konvertieren. Ich weiß, wie man ganze Zahlen und schwimmt.

Edit: Hier sind einige weitere bekannte Werte des gleichen Typs:

00 40 00 00 -> 90 
E3 18 00 00 -> 35 
00 00 01 00 -> 360 
55 15 00 00 -> 30 

Es mit Winkel/Grad irgendeiner Art zu tun hat.

Dank

+2

Warum würden Sie sie bearbeiten (die unbekannten Bytes), wenn Sie nicht wissen, was sie sind? – ABuckau

+0

Sind Sie sicher, dass sie zwei Werte von jeweils vier Bytes sind? – GSerg

+1

Woher wissen Sie, dass die resultierenden Werte für diese Datentypen 45 und 16 sind? –

Antwort

0

Es ist wirklich nicht klar, was Sie getan haben und was getan werden benötigt. Basiert auf this question. Sie können Ihr Byte mit System.BitConverter konvertieren. Bist du sicher, dass es 16 und nicht 26 für deinen zweiten Winkel ist?

Dim data() As Byte = {&H0, &H0, &HC8, &H41, &H0, &H0, &H70, &H41, &H0, &H20, &H0, &H0, &H7D, &H12, &H0, &H0, &HA, &H0, &H0, &H0} 

    Dim f1 As Single = System.BitConverter.ToSingle(data, 0) 
    Dim f2 As Single = System.BitConverter.ToSingle(data, 4) 
    Dim s1 As Int32 = CDbl(System.BitConverter.ToInt32(data, 8))/65536 * 360 
    Dim s2 As Int32 = CDbl(System.BitConverter.ToInt32(data, 12))/65536 * 360 
    Dim s3 As Int32 = System.BitConverter.ToInt32(data, 16) 

Dann brauchen Sie nur das Gegenteil zu tun, um Ihren Bytes

s1 = 180.0/360 * 65536 

    Dim bytes() As Byte = System.BitConverter.GetBytes(s2) 

    For Each b As Byte In bytes 
     Console.Write(b.ToString("x")) 
    Next 

Jetzt zu erhalten, wenn Ihr Problem die Datei öffnet, sonst die Datei oder etwas schreiben. Dann war es mir nicht klar.

+0

Verdammt mein Schlechter. Es sollte in der Tat 26 sein. Und deine Formel funktioniert. Danke vielmals. –