Float in 4 Bytes umwandeln?

07/30/2010 11:13 ShowUrSkillz#1
Hallo,

hab eine Frage wie kann ich einen Float-Wert in einen 4 Bytes Wert umwandeln in CheatEngine geht es ja ganz leicht wenn man einfach den Type ändert, aber wie macht man das in VisualBasic?

ReadFloat und ReadFloatPointer ergeben nicht das richtig Ergebnis.

Wenn ich mit ReadLong den Wert auslese stimmt er mit dem 4 Bytes Wert aus CE überein, also müsst ich nur noch einen Befehl finden der mir den Wert in Float umwandelt.

Danke für nützliche Antworten

MfG Show
07/30/2010 14:32 illstar#2
in vb.net sollte dir das eigentlich weiterhelfen ;)

byte to float --> BitConverter.ToSingle( bytes, index )
xxx to byte --> BitConverter.GetBytes( argument )

(4byte float ist in .net Single)
07/30/2010 18:24 ShowUrSkillz#3
PHP Code:
Dim Value1 As String

BitConverter
.ToSingle(Value14

Ich habs mal ausprobiert aber es kommt immer die Fehlermeldung:

"Der Wert vom Typ "String" kann nicht in ein "1-dimensionales Array von Byte" konvertiert werden."

Bei der Deklaration "Single" passiert das gleiche.
07/30/2010 21:54 illstar#4
BitConverter.ToSingle akzeptiert keinen string als parameter ... muss ein array aus mindestens 4 byte sein da ein Single 4 byte lange ist

kleines beispiel zum testen:

Code:
        Dim Bytes() As Byte = {&HD7, &HA3, &H25, &H42}
        Dim EinSingle As Single = 12.3456789
        Dim EinInt32 As Int32 = 1234567890

        Console.WriteLine("Die Bytes {0} convertiert in ein Int32  = dezimal {1}", BitConverter.ToString(Bytes), BitConverter.ToInt32(Bytes, 0))
        Console.WriteLine("Die Bytes {0} convertiert in ein Single = dezimal {1}", BitConverter.ToString(Bytes), BitConverter.ToSingle(Bytes, 0))


        Bytes = BitConverter.GetBytes(EinSingle) 'Single to Bytes
        Console.WriteLine("Das Single {0} convertiert in Bytes =  {1}", EinSingle, BitConverter.ToString(Bytes))

        Bytes = BitConverter.GetBytes(EinInt32) 'Int32 to Bytes
        Console.WriteLine("Das Int32  {0} convertiert in Bytes =  {1}", EinInt32, BitConverter.ToString(Bytes))
07/30/2010 22:41 ShowUrSkillz#5
Danke werde aber nicht ganz draus schlau, sorry.

Also ich hab den Wert "1148370570" den will ich in "970,977172851563" umwandeln.
Der Wert "1148370570" ist value1 und soll in value2 konvertiert werden als float.
Als was muss ich dann value1 und value2 deklarieren?

Könntest du mir dazu ein Beispiel geben? :)

mfg
07/30/2010 22:59 illstar#6
4 byte version
Code:
Dim str As String = "1148370570"
Dim int As Int32 = CInt(str)                          'string to int32
Dim b() As Byte = BitConverter.GetBytes(int)          'int32  to bytes
Dim float As Single = BitConverter.ToSingle(b, 0)     'bytes  to Single

Console.WriteLine("result: {0}", float)                       '970,9772

8 byte version
Code:
Dim str As String = "1148370570"
Dim int As Int64 = CLng(str)                          'string to int64
Dim b() As Byte = BitConverter.GetBytes(int)          'int64  to bytes
Dim float As Double = BitConverter.ToSingle(b, 0)     'bytes  to Double 

Console.WriteLine("result: {0}", float)                     '970,977172851563
viel spass damit ;)