myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Basistechnologien und allgemeine .NET-Klassen » 4 Byte in eine Float umwandeln gemäß IEEE 754
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

4 Byte in eine Float umwandeln gemäß IEEE 754

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Eystorhaf
myCSharp.de-Mitglied

Dabei seit: 19.02.2013
Beiträge: 3


Eystorhaf ist offline

4 Byte in eine Float umwandeln gemäß IEEE 754

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo

Ich habe folgendes Problem:

Ich erhalte folgende Daten von einer Schnittstelle:

C#-Code:
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:

C#-Code:
byte[] temp = { IstTemp[6], IstTemp[5], IstTemp[3], IstTemp[4] };

und dieses Array will ich dann in eine float umwandeln:

C#-Code:
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!

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Eystorhaf am 19.02.2013 13:34.

19.02.2013 13:24 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Th69
myCSharp.de-Poweruser/ Experte

avatar-2578.jpg


Dabei seit: 01.04.2008
Beiträge: 3.799
Entwicklungsumgebung: Visual Studio 2015/17


Th69 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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).
19.02.2013 13:31 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Eystorhaf
myCSharp.de-Mitglied

Dabei seit: 19.02.2013
Beiträge: 3

Themenstarter Thema begonnen von Eystorhaf

Eystorhaf ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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.

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Eystorhaf am 19.02.2013 13:35.

19.02.2013 13:33 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Console32
myCSharp.de-Mitglied

Dabei seit: 19.12.2011
Beiträge: 258


Console32 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

eigentlich nichts, ich bekomme meine float als String mit Hexzeichen, sieht ähnlich aus:

C#-Code:
                    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.
19.02.2013 14:02 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Console32
myCSharp.de-Mitglied

Dabei seit: 19.12.2011
Beiträge: 258


Console32 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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..
19.02.2013 14:36 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Eystorhaf
myCSharp.de-Mitglied

Dabei seit: 19.02.2013
Beiträge: 3

Themenstarter Thema begonnen von Eystorhaf

Eystorhaf ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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....
19.02.2013 14:40 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Console32
myCSharp.de-Mitglied

Dabei seit: 19.12.2011
Beiträge: 258


Console32 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von Eystorhaf:
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:

C#-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/
19.02.2013 14:54 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
DerKleineTomy
myCSharp.de-Mitglied

Dabei seit: 17.02.2012
Beiträge: 96
Entwicklungsumgebung: Visual Studio 2010


DerKleineTomy ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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.

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von DerKleineTomy am 19.02.2013 16:29.

19.02.2013 16:20 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 7 Jahre.
Der letzte Beitrag ist älter als 7 Jahre.
Antwort erstellen


© Copyright 2003-2020 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 23.11.2020 17:37