www.mikrocontroller.net

Forum: PC-Programmierung C# (2005) : 4Bytes in Float umwandlen


Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, ich habe Probleme mit der Umwandlung von 4 Byte in eine Kommazahl 
(float). Wie kann man dies in C# (2005) realisieren?

Hiermit kann ich schon mal ein Byte in eine Textbox ausgeben:
txtADC.Text = string.Format("{0:X2} ", NewMsg.Data[7]);

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Für jeden Vorschlag bin ich sehr sehr dankbar!

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Byte 1 = 56;
Byte 2 = 34;
Byte 3 = 23;
Byte 4 = 22;

----> diese 4 bytes sollen nun in einen float oder auch double 
umgewandelt
      werden.

Wie macht man dies mit C#(2005) ?

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Byte 1 = 56;
> Byte 2 = 34;
> Byte 3 = 23;
> Byte 4 = 22;
>
> ----> diese 4 bytes sollen nun in einen float oder auch double
> umgewandelt werden.

Und, welches Ergebnis erwartest Du?

Autor: Jorge (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Warum C#? Folter?

Cis ist eine Krüppelsprache a la Visual Basic deshalb Zeitverschwendung 
drum nimm C++. Übermorgen in 15 Jahren gibts das Zeuch eh nicht mehr.

>
Für dein Problem empfehle ich eine kurze Lib als COM-Object in C. Das 
geht mit dem Assistenten in vc6 und .net ganz leicht. COM ObjeKte kann 
man einfach einbinden.

Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Patrick,

ich denke Du musst Dein Problem präziser Formulieren. Auf Deine Frage 
kann ich (und ich denke auch andere) so keine sinnvolle Antwort geben.
Was willst Du machen? Willst Du die 4 Byte in EIN float zusammenfassen? 
Was steht dann vor und was nach dem Komma? Willst Du die 4 Byte einzeln 
jeweils in ein float umwandeln??? Was für eine Ergebnis willst Du haben?

Gruß
Florian

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok das hab ich vergessen zu sagen. Ich verwende auf einem 
Mikrocontroller einen AD-Wandler dieser liefert mir zuerst einen float 
Wert. Anschließend wandle ich diesen float Wert in 4 Bytes und sende 
dann diese 4 Bytes über den CAN-Bus. Jetzt möchte ich natürlich diese 4 
Bytes wieder in einen float Wert umwandeln (z.B. 1.3453). Wie kann ich 
dies in C# (2005 oder auch in C++ (MFC) realiseren?

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Patrick wrote:
> Ok das hab ich vergessen zu sagen. Ich verwende auf einem
> Mikrocontroller einen AD-Wandler dieser liefert mir zuerst einen float
> Wert.
Sowas hab' ich ja noch nie gehört!

> Anschließend wandle ich diesen float Wert in 4 Bytes und sende
> dann diese 4 Bytes über den CAN-Bus. Jetzt möchte ich natürlich diese 4
> Bytes wieder in einen float Wert umwandeln (z.B. 1.3453). Wie kann ich
> dies in C# (2005 oder auch in C++ (MFC) realiseren?
Nunja, float ist nicht gleich float. Du müsstest herausfinden a) welches 
Float Format von deinem AD-Wandler kommt (?) und b) in welcher 
Reihenfolge du die Bytes sendest.

Autor: ARM-Fan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Cis ist eine Krüppelsprache a la Visual Basic deshalb Zeitverschwendung
>drum nimm C++. Übermorgen in 15 Jahren gibts das Zeuch eh nicht mehr.

Oh mann, wenn ich so ein unqualifiziertes Geblubber schon wieder
lesen muß...

Die Lösung deines Problems ist ganz einfach. Die Bitconverterklasse
ist dein Freund. Die Byteorder hängt natürlich von deinem µC ab.
byte[] b = new byte[4] { 56, 34, 23, 22 };
float f = BitConverter.ToSingle(b,0);
=> 1.220848E-25
byte[] b = new byte[4] { 22, 23, 34, 56 };
float f = BitConverter.ToSingle(b,0);
=> 0.00003864531

Ich will mal die Programmiersprache sehen, in der das mit Bordmitteln
einfacher zu lösen geht!

Autor: der mechatroniker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ich will mal die Programmiersprache sehen, in der das mit Bordmitteln
> einfacher zu lösen geht!
char c[] = { 22, 23, 34, 56 };
float f = *(float *) c;

Autor: Jorge (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>>Cis ist eine Krüppelsprache a la Visual Basic deshalb Zeitverschwendung
>>drum nimm C++. Übermorgen in 15 Jahren gibts das Zeuch eh nicht mehr.

>Oh mann, wenn ich so ein unqualifiziertes Geblubber "schon wieder"
>lesen muß...

Memoryeffekt scheint da.

Wie qualifiziert muss man für die Microsoftstrategie sein.
Java: Einfach den Mainframe mit dem PC vernetzen da nimmt man schon mal 
Einbußen hin, durch die einfache Skalierbarkeit hat man sogar Vorteile.

Jetzt noch so ein plattformabhängiger Dialekt. Kannst ja in Dein Windows 
Forms Programm nach jedem Statement ein {for (int i=0;i<1000;i++);} 
einflicken.

Dein freier Wille: Where do You want to go today? Learn about C#...

Autor: Bernd H. (geeky)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich finde es gibt für Windows-Anwendungen nichts besseres als C#.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.