Hallo
Ich habe folgendes Problem:
Ich erhalte folgende Daten von einer Schnittstelle:
byte[] IstTemp = { 8, 3, 4, 78, 99, 66, 19, 245, 104 }
Von hier sollen die vier byte IstTemp[3], IstTemp[4], IstTemp[5], IstTemp[6],
in eine float umgewandelt werden, gemäß IEEE754
Dazu bringe ich die Betreffenden bytes in die richtige Reihenfolge gemäß IEEE 754:
byte[] temp = { IstTemp[6], IstTemp[5], IstTemp[3], IstTemp[4] };
und dieses Array will ich dann in eine float umwandeln:
float temperatur = BitConverter.ToSingle(temp,0);
Werte ich obiges entsprechend aus erhalte ich als Ergebnis 56.98....;
Jedoch sollte ich eigentlich 36.8 erhalten!
Kann mir jemand sagen was ich falsch mache ?
Grüße und Dank!
Hallo,
wie kommt du auf die Indexreihenfolge 6, 7, 4, 5?
M.E. entweder 4, 5, 6, 7 (Big Endian) oder 7, 6, 5, 4 (Little Endian).
Ja das is mir auch gerade aufgefallen, hatte mich vertippt!
Es soll 5,6,3,4 sein!
Liegt daran das die Reihenfolge vom ModBUs an der Geräteschnittstelle vertauscht wird.
eigentlich nichts, ich bekomme meine float als String mit Hexzeichen, sieht ähnlich aus:
uint floatAsInteger = uint.Parse(value.hexString, NumberStyles.AllowHexSpecifier, CultureInfo.InvariantCulture);
byte[] floatAsBytes = BitConverter.GetBytes(floatAsInteger);
return BitConverter.ToSingle(floatAsBytes, 0);
und funktioniert einwandfrei, muss an deiner Reihenfolge liegen.
Bzw deine bytes sind falsch, laut IEEE 754 ist 36,8 als bytes:
0x421B3333 als hex bzw
66, 27, 51, 51 oder in verkehrter Reihenfolge..
werte ich meine 4 bytes mit http://www.h-schmidt.net/FloatConverter/IEEE754.html
in meiner Reihenfolge aus:
Bytes: 5, 6, 3, 4
66, 19, 78, 99
Hex 42, 13, 48, 63
Ergibt sich: 36.82069
Ich verstehe einfach nicht wo bei mir der Denkfehler ist....
Bytes: 5, 6, 3, 4
66, 19, 78, 99
Hex 42, 13, 48, 63
Also bei mir ist 66, 19, 78, 99
als hex: 0x42134E63.
mit folgendem Code:
float test = BitConverter.ToSingle(new byte[] {99,78,19,66}, 0);
bekomme ich: 36.82655
genau wie mit diesem Converter http://gregstoll.dyndns.org/~gregstoll/floattohex/
Geb ich den Hexcode auf der von dir geposteten Seite ein, erhalte ich die folgenden Bytes: 66, 19, 72, 99
Scheint mir also so, als ob du ein Fehler beim Ablesen gemacht hast.
Edit: Scheint wohl doch nur ein Fehler bei dem Hexcode gewesen zu sein. Die von dir angegebenen Bytes ergeben laut der Seite tatsächlich dein gewolltes Ergebnis, jedoch einen anderen Hexcode.